九、Jenkins流水线
9.1 Jenkins流水线任务介绍
之前采用Jenkins的自由风格构建的项目,每个步骤流程都要通过不同的方式设置,并且构建过程中整体流程是不可见的,无法确认每个流程花费的时间,并且问题不方便定位问题。
Jenkins的Pipeline(流水线)可以让项目的发布整体流程可视化,明确执行的阶段,可以快速的定位问题。并且整个项目的生命周期可以通过一个Jenkinsfile文件管理,而且Jenkinsfile文件是可以放在项目中维护的。
所以Pipeline相对自由风格或者其他的项目风格更容易操作。
9.2 Jenkins流水线任务
9.2.1 创建Jenkins流水线任务
- 创建任务
创建Jenkins流水线任务
2、选择一个Hello World的Groovy脚本,应用保存
Hello World脚本生成
3、立即构建后查看效果图,清晰明了
构建后查看视图
9.2.2 Groovy脚本
- Groovy脚本基础语法并编辑脚本
// 所有脚本命令包含在pipeline{}中 pipeline { // 指定任务在哪个节点执行(Jenkins支持分布式) agent any // 声明全局环境变量方便后面使用,key = 'value'形式,指定变量名=变量值信息 environment{ host = '192.168.2.211' } // 存放所有任务的合集 stages { // 单个任务 stage('任务1:拉取git仓库代码') { // 实现任务的具体流程 steps { echo '拉取代码成功' } } // 单个任务 stage('任务2:通过maven构建项目') { // 实现任务的具体流程 steps { echo '通过maven构建项目-SUCCESS' } } stage('任务3:通过sonarqube做代码质量检测') { steps { echo '通过sonarqube做代码质量检测-SUCCESS' } } stage('任务4:通过docker制作自定义镜像') { steps { echo '通过docker制作自定义镜像-SUCCESS' } } stage('任务5:将自定义镜像推送到harbor') { steps { echo '将自定义镜像推送到harbor-SUCCESS' } } stage('任务6:通过publish over ssh通知目标服务器') { steps { echo '通过publish over ssh通知目标服务器-SUCCESS' } } } }
- 配置Grovvy脚本
- 将编辑好的脚本复制到流水线脚本中
2、立即构建查看效果
Ps:涉及到特定脚本,Jenkins给予了充足的提示,可以自动生成命令
生成命令位置
9.2.3 Jenkinsfile实现pipeline流水线脚本维护
在Jenkins上维护Groovy脚本成本过高,因此就衍生出了Jenkinsfile方式。Jenkinsfile方式需要将脚本内容编写到gitlab项目中的Jenkinsfile文件中,Jenkins每次构建都会自动从gitlab上拉取项目并且获取项目中Jenkinsfile文件对项目进行构建。
1、准备Jenkinsfile
gitlab上创建一个Jenkinsfile文件,将上面编辑好的Grovvy脚本复制进去,提交
2、Jenkins上配置pipeline流水线
3、立即构建测试效果
9.3 Jenkins流水线任务实现
9.3.1 参数化构建
- 添加参数化构建,方便选择不的项目版本
Git参数化构建:
9.3.2 拉取Git代码
从这里开始就是把Jenkins的每一步流程转换成代码去执行。流程就是在Jenkins流水线语法中生成对应的代码,然后用代码把gitlab上Jenkinsfile文件中对应的内容替换掉,然后再在Jenkins上构建。
1、通过流水线语法生成Checkout代码的脚本
2、修改gitlab中Jenkinsfile文件的内容
将*/main更改为标签${tag},表示引用配置中的Git参数tag,这里只是列出了修改拉取Git代码的部分,其余部分不修改,直接保存
pipeline { agent any environment{ host = '192.168.2.211' } stages { stage('任务1:拉取git仓库代码') { steps { checkout([$class: 'GitSCM', branches: [[name: '${tag}']], extensions: [], userRemoteConfigs: [[url: 'http://192.168.2.210/root/test.git']]]) } } }
3、立即构建查看效果
9.3.3 maven构建代码
- 自动生成maven构建代码
2、替换gitlab上的代码
通过脚本执行mvn的构建命令 :
pipeline { agent any environment{ host = '192.168.2.211' } stages { stage('任务1:拉取git仓库代码') { steps { checkout([$class: 'GitSCM', branches: [[name: '${tag}']], extensions: [], userRemoteConfigs: [[url: 'http://192.168.2.210/root/test.git']]]) } } stage('任务2:通过maven构建项目') { steps { sh '/var/jenkins_home/maven/bin/mvn clean package -DskipTest' } } } }
3、立即构建查看效果