Jenkins学习使用实践
前言
Jenkins就不用做多余的介绍了,作为CI/CD首选的开源解决方案,持续集成 (Continous Intergration)/ 持续交付 (Continous Delievery),本文只是用于记录使用Jenkins的一些基本操作,Jenkins官方文档也率先支持中文,相信对大家的学习热情会有积极地促进作用。
Jenkins学习使用实践
更新历史
2019年11月28日 - 更新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
Jenkins安装
Jenkins 项目产生两个发行线,长期支持版本 (LTS) 和每周更新版本。 根据你的组织需求,一个可能比另一个更受欢迎。
两个版本都以 .war 文件,原生包,安装程序,和 Docker 容器的形式分发。
https://jenkins.io/zh/download/
这里推荐下载使用LTS长期支持版本,以 CentOS 7 作为演示环境
1 | # Java 8 |
Jenkins升级
1 | # 备份jenkins.war |
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备份远端
|Name |Link |
|— |— |
|Google Login Plugin |https://plugins.jenkins.io/google-login |
|Role-based Authorization Strategy |https://plugins.jenkins.io/role-strategy |
|Periodic Backup |https://plugins.jenkins.io/periodicbackup |
|Notification |https://plugins.jenkins.io/notification |
|Git Parameter |https://plugins.jenkins.io/git-parameter |
|AnsiColor |https://plugins.jenkins.io/ansicolor |
|SSH Agent |https://plugins.jenkins.io/git-parameter |
|Build Name and Description Setter |https://plugins.jenkins.io/build-name-setter |
|Publish Over SSH |https://plugins.jenkins.io/publish-over-ssh |
|user build vars |https://plugins.jenkins.io/build-user-vars-plugin |
|Throttle Concurrent Builds |https://plugins.jenkins.io/throttle-concurrents |
|Active Choices |https://plugins.jenkins.io/uno-choice |
|Rebuilder |https://plugins.jenkins.io/rebuild |
创建第一个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 构建后操作:无
- 点击立刻构建
- 找到控制台输出
1 | Console Output |
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
- 新建Job: Jenkins -> 新建 -> 输入 Job名称: “My-first-pipeline-demo” -> 选择 Pipeline -> 点击 “OK”
- 配置: 在Pipeline -> Script 文本输入框中输入下列语句,点击 ”保存”
- 立即构建
1 | pipeline { |
Jenkins忘记密码怎么办
如果权限设置错误,或者忘记密码,导致admin自己都无法登陆Jenkins怎么办?
- 命令行停止Jenkins;
- 先备份$JENKINS_HOME中的config.xml;
- 用编辑器打开$JENKINS_HOME中的config.xml;
- 将
true 元素中的true改为false; - 将
和 元素的内容删掉; - 命令行启动Jenkins。
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://
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
1 | # python-jenkins package |
Jenkins迁移
1 | # 创建迁移脚本 |
参考内容
官方手册永远是你的最佳参考内容
Jenkins 用户手册 - https://jenkins.io/zh/doc/