其他两篇相关文章为
配置Jenkins Job(初级)
初级通过可视化界面配置Job,已经可以满足大部分需求,但在之后我需要自定义Mattermost订阅消息内容时,我发现我必须使用Jenkins流水线脚本发送自定义消息,因此我实际中使用了高级的配置过程,初级的可以供初学者快速上手。
构建触发器——触发远程构建
- 在Job的配置中添加构建触发器:
-
这样只要在流水线的测试阶段中访问远程触发器即可。 注意: 访问Jenkins Remote API是需要权限的,这里填上登录的用户即可。
test: # 使用jenkins远程构建 stage: test script: - curl -u $JENKINS_USER:$JENKINS_PWD $JENKINS_TRIGGER_URL
构建——执行Shell
How to get the numeric exit status of an exited docker container?
-
构建将使用执行Shell的方式进行。
echo "---开始构建---" docker pull your_registry.com/gauge-taiko-icy:master docker run --privileged --name gauge-taiko your_registry.com/gauge-taiko-icy:master || true docker inspect gauge-taiko --format='{{.State.ExitCode}}' docker cp gauge-taiko:/gauge/reports/html-report/. ./reports docker rm gauge-taiko echo "---结束构建---"
- 思路是容器会根据测试成功或失败而执行
exit 0
或exit 1
,然后docker再根据容器的退出状态得知测试情况。
- 思路是容器会根据测试成功或失败而执行
构建后操作——发布HTML页面
- 如果Shell执行顺利,那么
./reports
下将会存放着HTML测试报告,所以我们可以添加Publish HTML reports
-
如果报告发生样式丢失情况,请前往Jenkins-系统管理-脚本命令行,输入
System.setProperty("hudson.model.DirectoryBrowserSupport.CSP", "")
获取测试情况
- 首先需要得知测试是否成功,这个值可以在这步查看:
docker inspect gauge-taiko --format='{{.State.ExitCode}}'
-
然后是测试报告,可以之后将该url分享出去
- 如果希望给匿名用户权限,请在安全 > 全局安全配置 > 授权策略勾选安全矩阵,并为Anonymous Users添加Read权限,如下图
配置Jenkins Pipeline(高级)
jenkins pipeline中获取shell命令的输出_紫眸的博客-CSDN博客
jenkins pipeline将通过执行的shell命令更改环境变量environment_yudelian的博客-CSDN博客
Pipeline的用法相对来说还是稍微比较复杂的,不过如果只是简单应用的话,也不会涉及额外的语句。类似GitLab的流水线,分为多个stage。
如果需要执行插件的功能,可以在流水线 > 流水线语法中使用辅助功能自动生成流水线语句。
流水线总体架构
-
顺序执行一些stage后,根据测试结果分叉,选择对应的最终阶段
pipeline{ agent any stages{ stage('test'){ steps{ // stage test scripts } } stage('publish HTML'){ steps{ // stage publish HTML scripts } } stage('success'){ when{ // when test success } steps{ // stage success scripts } } stage('failed'){ when{ // when test failed } steps{ script{ // stage failed scripts } } } } }
Stage1:test
-
在这个阶段里我们直接执行之前写好的shell脚本:
stage('test'){ steps{ script{ echo "---开始构建---" sh 'docker pull your_registry.com/gauge-taiko:master' sh 'docker run --privileged --name gauge-taiko your_registry.com/gauge-taiko:master || true' TEST_RESULTS =sh( returnStdout: true, script: "docker inspect gauge-taiko --format='{{.State.ExitCode}}'" ).trim() sh 'docker cp gauge-taiko:/gauge/reports/html-report/. ./reports' sh 'docker rm gauge-taiko' echo "---结束构建---" } } }
- 这里注意,我们将关键的测试结果赋值给pipeline的变量TEST_RESULTS。
trim()
去掉了结果前后万恶的空格,
- 这里注意,我们将关键的测试结果赋值给pipeline的变量TEST_RESULTS。
Stage2:publish HTML
-
这段脚本就是用辅助功能自动生成的
stage('publish HTML'){ steps{ script{ publishHTML( [allowMissing: false, alwaysLinkToLastBuild: false, keepAll: false, reportDir: './reports', reportFiles: 'index.html', reportName: 'HTML Report', reportTitles: '']) } } }
Stage3-1:success
-
如果TEST_RESULTS为0,证明测试通过。
- 注意:会有定时构建计划保持下一次构建定时运行
stage('success'){ when{ expression { TEST_RESULTS == "0"} } steps{ script{ echo 'success' } } }
Stage3-2:failed
-
如果TEST_RESULTS为1,证明测试失败
stage('failed'){ when{ expression { TEST_RESULTS == "1"} } steps{ script{ mattermostSend channel: 'jenkins_hook', color: '#E40303', endpoint: 'your_mattermost_url/hooks/yx***dw', message: '测试失败!测试报告:[GaugeTestPipeline/HTML_20Report/](your_jenkins_url/job/GaugeTestPipeline/HTML_20Report/)' API_TOKEN= '110301370d3e0bcbb241ae38d3fb69ce2a' CRUMB=sh(returnStdout: true, script: "curl -s 'http://admin:110301370d3e0bcbb241ae38d3fb69ce2a@your_jenkins_url/crumbIssuer/api/xml?xpath=concat(//crumbRequestField,\\\":\\\",//crumb)'" ).trim() echo "$CRUMB" sh 'curl -X POST -H "$CRUMB" http://admin:110301370d3e0bcbb241ae38d3fb69ce2a@your_jenkins_url/GaugeTestPipeline/disable' error("测试失败") } } }
-
\\\"
会先被pipeline转义成\"
,然后再被sh转义成"
- API_TOKEN需要访问个人中心 > 设置 > API Token获取
- 项目如果被禁用,就不会继续定时构建,这样就防止反复向Mattermost推送失败消息
-
MINE MIND系列将在我的GitHub上实时更新,同时精选部分汇总于CSDN专栏
GitHub仓库:https://github.com/IcyLeaves/MINE-MIND
CSDN专栏:https://blog.csdn.net/qq_37398834/category_10975647.html