【百炼成魔】Jenkins 流水线pipeline
Jenkins流水线任务介绍
1 2 3
| 之前采用的都是Jenkins的自由风格,每个流程都要通过不同的方式设置,并且构建过程中整体流程时不可见的,无法确认每个流程花费的时间,同时不方便问题的定位。
Jenkins的Pipeline可以让项目的发布整体流程可视化,明确执行的阶段,快速定位问题。让整个项目的生命周期可以通过一个Jenkinsfile文件管理,而且Jenkinsfile文件是可以放在项目中维护。
|
构建Jenkins流水线任务
新建流水线工程
进入工程配置 流水线
点击构建 可以看到流水线任务就是模块化任务,单独的log比自定义工程更方便查询日志方便管理
Groovy脚本基本语法
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29
| pipeline { agent any environment{ host = '192.168.117.141' }
stages { stage('任务1') { steps { echo 'do something' } } stage('任务2') { steps { echo 'do something' } } } }
|
配置Git
JenkinsFile实现pipeline
1
| Jenkinsfile方式需要将脚本内容编写到项目中的Jenkinsfile文件中,每次构建会自动拉取并且获取项目中的Jenkinsfile文件来对项目进行构建
|
进入代码目录
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36
| pipeline { agent any
stages { stage('拉取Git代码') { steps { echo '拉取Git代码' } }
stage('检测代码质量') { steps { echo '检测代码质量' } }
stage('构建代码') { steps { echo '构建代码' } }
stage('制作自定义镜像并发布Harbor') { steps { echo '制作自定义镜像并发布Harbor' } }
stage('基于Harbor部署工程') { steps { echo '基于Harbor部署工程' } } } }
|
推送到仓库
1 2 3
| git add * git commit -m "create jenkinsfile" git push -u origin main
|
进入gitlab查看
再次点击构建 可以看到工程全部模块化展出,包含项目构建时间,构建状态,构建日志等
流水线任务实现参数化构建
回到工程配置添加参数化构建,方便选择不同的项目版本
拉取Git代码
通过流水线语法生成Checkout代码的脚本
生成脚本并复制 将*/master更改为标签${tag}
修改Jenkinsfile
生成的流水线脚本
1
| checkout scmGit(branches: [[name: '${tag}']], extensions: [], userRemoteConfigs: [[url: 'http://192.168.117.141:8929/root/devops-test.git']])
|
通过脚本执行mvn的构建命令
输入
1
| /var/jenkins_home/maven/bin/mvn clean package
|
生成的流水线脚本
1
| sh '/var/jenkins_home/maven/bin/mvn clean package'
|
修改Jenkinsfile
代码质量检测
通过脚本执行sonar-scanner命令即可
1
| /var/jenkins_home/sonar-scanner/bin/sonar-scanner -Dsonar.sources=./ -Dsonar.projectname=${JOB_NAME} -Dsonar.projectKey=${JOB_NAME} -Dsonar.java.binaries=target/ -Dsonar.login=8f0b840a4211368e33d38f33ddd0f19c6fc112bd
|
生成的流水线脚本
1
| sh '/var/jenkins_home/sonar-scanner/bin/sonar-scanner -Dsonar.sources=./ -Dsonar.projectname=${JOB_NAME} -Dsonar.projectKey=${JOB_NAME} -Dsonar.java.binaries=target/ -Dsonar.login=8f0b840a4211368e33d38f33ddd0f19c6fc112bd'
|
要是令牌忘记了再去生成一个即可
修改Jenkinsfile
制作自定义镜像并发布
修改Jenkinsfile 增加环境变量
1 2 3 4
| harborHost = '192.168.117.141:7788' harborRepo = 'devops' harborUser = 'admin' harborPasswd = 'Harbor12345'
|
输入
1 2 3 4 5 6
| cd /var/jenkins_home/workspace/${JOB_NAME}/docker mv ../target/*.jar ./ docker build -t ${JOB_NAME}:$tag . docker login -u admin -p Harbor12345 192.168.117.141:7788 docker tag ${JOB_NAME}:$tag 192.168.117.141:7788/devops/${JOB_NAME}:$tag docker push 192.168.117.141:7788/devops/${JOB_NAME}:$tag
|
生成的流水线脚本
1 2 3 4 5 6
| sh '''cd /var/jenkins_home/workspace/${JOB_NAME}/docker mv ../target/*.jar ./ docker build -t ${JOB_NAME}:$tag . docker login -u admin -p Harbor12345 192.168.117.141:7788 docker tag ${JOB_NAME}:$tag 192.168.117.141:7788/devops/${JOB_NAME}:$tag docker push 192.168.117.141:7788/devops/${JOB_NAME}:$tag'''
|
编写jenkinsfire
生成Publish Over SSH脚本
输入
1
| /usr/bin/devops_start.sh $harborHost $harborRepo $JOB_NAME $tag
|
注意这里 由于使用了变量这里的单引号必须改为双引号
生成的脚本 修改双引号为
1
| sshPublisher(publishers: [sshPublisherDesc(configName: 'devops', transfers: [sshTransfer(cleanRemote: false, excludes: '', execCommand: "/usr/bin/devops_start.sh $harborHost $harborRepo $JOB_NAME $tag", execTimeout: 120000, flatten: false, makeEmptyDirs: false, noDefaultExcludes: false, patternSeparator: '[, ]+', remoteDirectory: '', remoteDirectorySDF: false, removePrefix: '', sourceFiles: '')], usePromotionTimestamp: false, useWorkspaceInPromotion: false, verbose: false)])
|
修改jenkinsfile
修改完再次推送代码到v1.0.3版本 顺便也推送到main
1 2 3 4 5
| git add * git commit -m "create v1.0.3" git tag -a v1.0.3 -m "create jenkinsfile" git push -u origin v1.0.3 git push -u origin main
|
构建
若机器重启过 导致构建失败 如下图
需要再次配置容器对宿主机的docker权限 并重启jenkins
1 2 3 4
| chown root:root /var/run/docker.sock chmod o+rw /var/run/docker.sock cd /usr/local/jenkins docker-compose up -d
|
再次构建完成
访问IP:9901
sonarqube 也创建了新的工程bug检测
harbor仓库中也存储了工程提交的镜像
提交v1.0.4 测试访问
1
| vim src/main/java/com/example/testinit/controller/HelloWord.java
|
1 2 3 4
| git add * git commit -m "create v1.0.4" git tag -a v1.0.4 -m "create v1.0.4" git push -u origin v1.0.4
|
再次构建v1.0.4 完美访问
jenkins-pipeline 流水线到这里就结束了