Jenkins 是一款 Java 开发的跨平台持续集成和持续发布的开源项目,它具有如下特征:
安装及迁移方便:安装直接部署 war 包,迁移只需替换 JENKINS_HOME 目录。
配置方便:可视化后台操作。
丰富的插件生态圈:比如 git, junit, jacoco 等。
可扩展:自定义插件。
分布式:支持 Master-Slave。
Jenkins 已经作为各大公司进行 CI/CD 的首选工具。
Jenkins UI 从 2006 年-2016 年,几乎没有变化。
为了适应 Jenkins Pipeline 和 Freestyle jobs 任务,Jenkins 推出了 BlueOcean UI,其目的就是让程序员执行任务时,降低工作流程的复杂度和提升工作流程的清晰度,它具有如下特征:
清晰的可视化,对 CI/CD pipelines, 可以快速直观的观察项目 pipeline 状态。
pipeline 可编辑 (开发中),可视化编辑 pipeline,现在只能通过配置中 Pipeline 的 Pipeline script 编辑。
pipeline 精确度,通过 UI 直接介入 pipeline 的中间问题。
集成代码分支和 pull 请求。
BlueOcean 是以插件的形式存在,需要 Jenkins 版本 2.7.* 以上,目前还是 beta 版本,功能不是很完善。
安装步骤:
系统管理->管理插件->可选插件,选择 BlueOcean beta->restart。
安装完毕后,BlueOcean 入口在菜单栏居中: "Open Blue Ocean",进去后可以看到全新的 UI:
我们新建一个 Pipeline 项目,配置如下:
其中最重要的是定义 pipeline script:
node {
stage('Clone Code') { // for display purposes
// Get some code from a GitHub repository
git 'https://github.com/trautonen/coveralls-maven-plugin.git/'
}
stage('Code Analysis') {
sh "mvn clean"
sh "infer -- mvn compile"
}
stage('Testing') {
sh "mvn test"
junit 'target/surefire-reports/TEST-*.xml'
}
stage('Package') {
sh "'mvn' -Dmaven.test.skip=true package"
archive 'target/*.jar'
}
stage('Deploy') {
echo 'pipeline success'
}
}
pipeline script 定义了整个 Pipeline 的流程,stage('Clone Code')
中Clone Code
就是 pipeline 中的第一步,依次类推。
每一步做具体任务,比如git 'https://github.com/trautonen/coveralls-maven-plugin.git/'
就是去拉源码,具体的语法可以参考 Pipeline Syntax:
配置完任务后,进入 BlueOcean,点击 Run:
开始执行 pipeline:
执行结束后,pipeline 顺利通过:
查看 Tests 结果(对应 pipeline script 中junit 'target/surefire-reports/TEST-*.xml'
):
查看打包结果 (对应 pipeline script 中archive 'target/*.jar'
):
执行过程很流畅,每个步骤通过清晰的可视化过程,使用者能快速的定位流程中的问题。
现在 BlueOcean 还是 beta 版本,支持的功能比较局限,比如不支持参数化,不支持指定具体 slave 执行等等,我们看下 BlueOcean Roadmap:
相信 Jenkins BlueOcean 功能会越来越完善,而使用 Jenkins BlueOcean 会大大提高 CI/CD 工作效率。