Jenkins 学习使用实践 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
请不要在回答技术问题时复制粘贴 AI 生成的内容
wsgzao
V2EX    程序员

Jenkins 学习使用实践

  •  
  •   wsgzao
    wsgzao 2019-02-14 19:04:37 +08:00 4497 次点击
    这是一个创建于 2490 天前的主题,其中的信息可能已经有所发展或是发生改变。

    前言

    Jenkins 就不用做多余的介绍了,作为 CI/CD 首选的开源解决方案,持续集成 (Continous Intergration)/ 持续交付 (Continous Delievery),本文只是用于记录使用 Jenkins 的一些基本操作,Jenkins 官方文档也率先支持中文,相信对大家的学习热情会有积极地促进作用。

    Jenkins 学习使用实践

    更新历史

    2019 年 02 月 12 日 - 初稿

    阅读原文 - https://wsgzao.github.io/post/jenkins/

    扩展阅读

    Jenkins - https://jenkins.io/zh/


    Jenkins 简介

    构建伟大,无所不能

    Jenkins 是开源 CI&CD 软件领导者, 提供超过 1000 个插件来支持构建、部署、自动化,满足任何项目的需要。

    Jenkins 用户手册 - https://jenkins.io/zh/doc/

    Jenkins 训练营之基础篇 - https://ke.qq.com/course/265167 Jenkins 训练营之带你玩转 Pipeline - https://ke.qq.com/course/252785

    https://ke.qq.com/webcourse/index.html#cid=265167&term_id=100312699&taid=1794918372871119&vid=p1423f5tn3g

    https://ke.qq.com/webcourse/index.html?cw_id=91852&ac_type=3#cid=252785&term_id=100298102&taid=1707945285114737&type=1024&vid=w1422iqh9q1

    Jenkins 安装

    Jenkins 项目产生两个发行线,长期支持版本 (LTS) 和每周更新版本。 根据你的组织需求,一个可能比另一个更受欢迎。 两个版本都以 .war 文件,原生包,安装程序,和 Docker 容器的形式分发。 https://jenkins.io/zh/download/

    这里推荐下载使用 LTS 长期支持版本,以 CentOS 7 作为演示环境

    # Java 8 yum install java # Jenkins stable version sudo wget -O /etc/yum.repos.d/jenkins.repo https://pkg.jenkins.io/redhat-stable/jenkins.repo sudo rpm --import https://pkg.jenkins.io/redhat-stable/jenkins.io.key yum install jenkins # start jenkins service jenkins start # 初始化配置向导 http://192.168.56.103:8080/ cat /var/lib/jenkins/secrets/initialAdminPassword 5224fc83b6d84cc2be69a18c53309ea4 Install suggested plugins 是否创建管理员账户或者跳过 

    Jenkins 入门

    主要的 Job 类型

    Freestyle project 自由风格项目,Jenkins 最主要的项目类型

    Maven Project Maven 项目专用,类似 Freestyle,更简单

    Multi-configuration project 多配置项目,适合需要大量不同配置(环境,平台等)构建

    Pipeline 流水线项目,适合使用 pipeline(workflow)插件功能构建流水线任务,或者使用 Freestyle project 不容易实现的复杂任务

    Multibranch Pipeline 多分支流水线项目,根据 SCM 仓库中的分支创建多个 Pipeline 项目

    Freestyle 项目

    General 项目基本配置 项目名字,描述,参数,禁用项目,并发构建,限制构建默认 node 等等

    Source code Management 代码库信息,支持 Git,Subversion 等

    Build Triggers 构建触发方式 周期性构建,Poll SCM,远程脚本触发构建,其他项目构建结束后触发等

    Build Environment 构建环境相关设置 构建前删除 workspace,向 Console 输出添加时间戳,设置构建名称,插入环境变量等

    Build 项目构建任务 添加 1 个或者多个构建步骤

    Post-build Actions 构建后行为 Artifact 归档,邮件通知,发布单元测试报告,触发下游项目等等

    规范项目必要配置

    本规范尤其适用于较多项目共用同一 Jenkins 的场景

    • 项目命名规范
    • 设置项目描述
    • 设置历史构建清理规则
    • 设置构建节点 Label
    • 邮件通知

    常用插件

    注意 Jenkins 备份策略,建议结合 rsync 备份远端

    Jenkins 定时的备份:ThinBackup 邮件发送插件: Email Extension Plugin 空间清理扩展插件: Distributed Workspace Clean plugin

    Jenkins 常用插件 https://vwin.github.io/2019/01/07/Jenkins%E9%AB%98%E6%95%88%E6%8F%92%E4%BB%B6%E6%95%B4%E7%90%86/

    创建第一个 Job

    安装 Timestamper 插件 系统管理-插件管理-可用插件,搜索到 timestamper 点击 Install without restart

    新建一个 Freestyle 类型的 Job

    • General 项目名称: My-first-freestyle-demo
    • Build Environment 构建环境:勾选 Add timestamps to the Console Output
    • Build 构建:屏幕打印出 "这是我的第一个 Jenkins Job, oops "
    • Post-build Actions 构建后操作:无
    • 点击立刻构建
    • 找到控制台输出
    Console Output 14:40:59 Started by user admin 14:40:59 Building in workspace /var/lib/jenkins/workspace/My-first-freestyle-demo 14:41:00 [My-first-freestyle-demo] $ /bin/sh -xe /tmp/jenkins3737737887278720679.sh 14:41:00 + echo '这是我的第一个 Jenkins Job, oops ' 14:41:00 这是我的第一个 Jenkins Job, oops 14:41:00 Finished: SUCCESS 

    Jenkins Pipeline 介绍

    Pipeline,简而言之,就是一套运行于 Jenkins 上的工作流框架,将原本独立 运行于单个或者多个节点的任务连接起来,实现单个任务难以完成的复杂流程编排与可视化。

    Pipeline 是 Jenkins2.X 最核心的特性,帮助 Jenkins 实现从 CI 到 CD 与 DevOps 的转变

    什么是 Jenkins Pipeline?

    Jenkins Pipeline 是一组插件,让 Jenkins 可以实现持续交付管道的落地和实施。持续交付管道(CD Pipeline)是将软件从版本控制阶段到交付给用户或客户的完 整过程的自动化表现。软件的每一次更改(提交到源代码管理系统)都要经过一个复杂的过程才能被发布。

    Pipeline 提供了一组可扩展的工具,通过 Pipeline Domain Specific Language(DSL) syntax 可以达到 Pipeline as Code 的目的

    Pipeline as Code:Jenkinsfile 存储在项目的源代码库

    Jenkins Pipeline 核心概念

    Stage 阶段,一个 Pipeline 可以划分为若干个 Stage,每个 Stage 代表一组操作,例如: "Build", "Test", "Deploy" 。 注意,Stage 是一个逻辑分组的概念,可以跨多个 Node。

    Node 节点,一个 Node 就是一个 Jenkins 节点,或者是 Master,或者是 Agent,是执行 Step 的具体 运行环境。

    Step 步骤,Step 是最基本的操作单元,小到创建一个目录,大到构建一个 Docker 镜像,由各类 Jenkins Plugin 提供,例如: sh 'make'

    为什么要用 Pipeline?

    • 代码:Pipeline 以代码的形式实现,通常被检入源代码控制,使团队能够编辑,审查和迭代其 CD 流程。
    • 可持续性:Jenkins 重启或者中断后都不会影响 Pipeline Job。
    • 停顿:Pipeline 可以选择停止并等待人工输入或批准,然后再继续 Pipeline 运行。
    • 多功能:Pipeline 支持现实世界的复杂 CD 要求,包括 fork/join 子进程,循环和 并行执行工作的能力。
    • 可扩展:Pipeline 插件支持其 DSL 的自定义扩展以及与其他插件集成的多个选项。

    Pipeline 和 Freestyle 的区别

    Freestyle: 上游 / 下游 Job 调度,如 BuildJob ->TestJob -> DeployJob 在 DSL Job 里面调度多个子 Job(利用 Build Flow plugin)

    Pipeline: 单个 Job 中完成所有的任务编排 全局视图

    Pipeline 会取代 Freestyle 么?

    • Pipeline 一定会取代 Build Flow 插件
    • 会,当你希望做到 Pipeline as code 的时候
    • 会,当你独立运行一组 Job 没有特殊价值或者意义的时候
    • 会,当你可以从 Multibranch Pipeline 受益的时候
    • 会,当你希望获取类似于 TravisCI 风格的工作流的时候

    Jenkins Pipeline 入门

    Pipeline 脚本是由 Groovy 语言实现 无需专门学习 Groovy

    Pipeline 支持两种语法 Declarative 声明式(在 Pipeline plugin 2.5 中引入) Scripted Pipeline 脚本式

    如何创建基本的 Pipeline 直接在 Jenkins Web UI 网页界面中输入脚本 通过创建一个 Jenkinsfile 可以检入项目的源代码管理库

    最佳实践 通常推荐在 Jenkins 中直接从源代码控制(SCM)中载入 Jenkinsfile Pipeline

    快速创建一个简单的 Pipeline

    1. 新建 Job: Jenkins -> 新建 -> 输入 Job 名称: “ My-first-pipeline-demo ” -> 选择 Pipeline -> 点击 "OK"
    2. 配置: 在 Pipeline -> Script 文本输入框中输入下列语句,点击 ”保存”
    3. 立即构建
    pipeline { agent any stages { stage('Build') { steps { echo 'Build' } } stage('Test') { steps { echo 'Test' } } stage('Deploy') { steps { echo 'Deploy' } } } } 

    Jenkins 忘记密码怎么办

    如果权限设置错误,或者忘记密码,导致 admin 自己都无法登陆 Jenkins 怎么办?

    • 命令行停止 Jenkins;
    • 先备份$JENKINS_HOME 中的 config.xml;
    • 用编辑器打开$JENKINS_HOME 中的 config.xml;
    • 将<usesecurity>true</usesecurity>元素中的 true 改为 false;
    • 将<authorizationstrategy>和<securityrealm>元素的内容删掉;</securityrealm></authorizationstrategy>
    • 命令行启动 Jenkins。
    • /ul>

      Ansible Jenkins API Token 使用技巧

      Jenkins REST API 提供了 API token,使得可以在程序中使用 API token 进行认证(而不是使用你真实的密码)。

      API token 可以在用户个人设置界面查看 到用户→用户 id→设置页面,在 API Token 区域点击 Show API token 按钮,便可查看 API token,同时还可以更改 API token 相应的 URL 是 http://<JENKINS_URL>/user/<userid>/configure</userid>

      Manage Jenkins jobs by using Jenkins REST API

      jenkins_job_facts Get facts about Jenkins jobs https://docs.ansible.com/ansible/latest/modules/jenkins_job_facts_module.html

      jenkins_job Manage jenkins jobs https://docs.ansible.com/ansible/latest/modules/jenkins_job_module.html

      # python-jenkins package pip install python-jenkins # ansble playbook example --- - hosts: all gather_facts: no tasks: - name: Get host info local_action: module: jenkins_job_facts url: https://xxx user: xxx token: xxx glob: '*mh_kg*' register: my_jenkins_job_facts - debug: msg: "{{my_jenkins_job_facts}}" 

      参考内容

      官方手册永远是你的最佳参考内容

      Jenkins 用户手册 - https://jenkins.io/zh/doc/

    5 条回复    2019-02-15 00:06:23 +08:00
    mafeifan
        1
    mafeifan  
       2019-02-14 19:07:09 +08:00 via Android
    点个赞,最近也在看 Jenkins。 不过中文文档不是最近的,建议直接看官方英文的。
    vclin
        2
    vclin  
       2019-02-14 22:02:15 +08:00
    mark 一下,自己在 linux 搭建了一个空格,还没填充内容
    ymj123
        3
    ymj123  
       2019-02-14 23:15:22 +08:00 via iPhone
    嗯,挺好的,我用 Jenkins 挺多的。来学习一下。
    li27962278
        4
    li27962278  
       2019-02-14 23:17:40 +08:00
    有用过的经历 再深入一下
    zhouyang1203
        5
    zhouyang1203  
       2019-02-15 00:06:23 +08:00
    @mafeifan 哈哈,可以考虑加入中文本地化 sig,现在正缺人手
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     2870 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 25ms UTC 14:28 PVG 22:28 LAX 06:28 JFK 09:28
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86