其他两篇相关文章为

  • Gauge测试UI+Jenkins流水线+Mattermost消息订阅(Gauge篇)
  • Gauge测试UI+Jenkins流水线+Mattermost消息订阅(Mattermost篇)

持续交付流水线中的消息传递与协作实现

GitLab 自动触发 Jenkins 构建

配置Jenkins Job(初级)

初级通过可视化界面配置Job,已经可以满足大部分需求,但在之后我需要自定义Mattermost订阅消息内容时,我发现我必须使用Jenkins流水线脚本发送自定义消息,因此我实际中使用了高级的配置过程,初级的可以供初学者快速上手。

构建触发器——触发远程构建

Remote Access API

  • 在Job的配置中添加构建触发器

  • 这样只要在流水线的测试阶段中访问远程触发器即可。 注意: 访问Jenkins Remote API是需要权限的,这里填上登录的用户即可。

    test: # 使用jenkins远程构建stage: testscript:- curl -u $JENKINS_USER:$JENKINS_PWD $JENKINS_TRIGGER_URL
    
构建——执行Shell

使用echo $? 查看命令是否执行成功

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 0exit 1,然后docker再根据容器的退出状态得知测试情况。
构建后操作——发布HTML页面

Jenkins上HTML报告显示无格式?

accessing Jenkins HTML report

  • 如果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.io)

jenkins pipeline将通过执行的shell命令更改环境变量environment_yudelian的博客-CSDN博客

10分钟搞定让你困惑的 Jenkins 环境变量_日拱一兵-CSDN博客

Pipeline的用法相对来说还是稍微比较复杂的,不过如果只是简单应用的话,也不会涉及额外的语句。类似GitLab的流水线,分为多个stage。

如果需要执行插件的功能,可以在流水线 > 流水线语法中使用辅助功能自动生成流水线语句。

流水线总体架构
  • 顺序执行一些stage后,根据测试结果分叉,选择对应的最终阶段

    pipeline{agent anystages{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()去掉了结果前后万恶的空格,
Stage2:publish HTML

Jenkins Pipeline publish html report

  • 这段脚本就是用辅助功能自动生成的

    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

Failing a build in Jenkinsfile

How to disable a Jenkins job via curl?

  • 如果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

[Jenkins]Gauge测试UI+Jenkins流水线+Mattermost消息订阅(Jenkins篇)相关推荐

  1. [Mattermost]Gauge测试UI+Jenkins流水线+Mattermost消息订阅(Mattermost篇)

    其他两篇相关文章为 Gauge测试UI+Jenkins流水线+Mattermost消息订阅(Gauge篇) Gauge测试UI+Jenkins流水线+Mattermost消息订阅(Jenkins篇) ...

  2. [Gauge]Gauge测试UI+Jenkins流水线+Mattermost消息订阅(Gauge篇)

    其他两篇相关文章为 Gauge测试UI+Jenkins流水线+Mattermost消息订阅(Jenkins篇) Gauge测试UI+Jenkins流水线+Mattermost消息订阅(Mattermo ...

  3. 持续集成之企业微信通知:5:在Jenkins中向企业微信推送消息

    在这篇文章中结合具体的示例来介绍在Jenkins中如何向企业微信群推送消息. 环境准备 这里使用Easypack的Jenkins 2.164.3来创建验证用的Jenkins环境.使用如下步骤即可完成. ...

  4. Jenkins + Gitlab+ Docker + SpringBoot 构建流水线

    1 环境 192.168.38.80 docker jenkins gitlab 2 Spring Boot 2.1 HelloController @RestController public cl ...

  5. 好棒,测试妹子都能看懂的Jenkins Docker安装教程

    最近团队出了个线上BUG,导致了几个用户的订单不对,因为发现的及时,客服那边还没有接到投诉就修正过来了.所以就想贿赂测试妹子这次BUG能不能不往上报,要不然我还得写报告.复盘啥的.本以为一顿饭能搞定, ...

  6. jenkins修改pom文件_动手实践:美化 Jenkins 报告插件的用户界面

    对于 Jenkins 而言,可使用插件来可视化各种构建步骤的结果.有一些插件可用于呈现测试结果.代码覆盖率.静态分析等.这些插件通常都会获取给定构建步骤的构建结果,并在用户界面中显示它们.为了呈现这些 ...

  7. Jenkins——Jenkins构建Maven项目(三种风格)+Jenkins项目构建细节

    Jenkins构建Maven项目+Jenkins项目构建细节 Jenkins构建的项目类型介绍 自由风格项目构建 拉取代码 编译打包 远程部署 代码改动后的持续集成 Maven项目构建 Pipelin ...

  8. jenkins war包_Jenkins的安装和部署(jenkins教程)

    一.jenkins的下载.安装以及环境的搭建部署. 1.什么是jenkins以及它的作用: Jenkins 是一个可扩展的持续集成(CI)平台.它只是一个平台,真正运作的都是插件. Jenkins的主 ...

  9. Docker+Jenkins持续集成环境(2)使用docker+jenkins构建nodejs前端项目

    Docker+Jenkins持续集成环境(2)使用docker+jenkins构建nodejs前端项目 前文使用Docker搭建Jenkins+Docker持续集成环境我们已经搭建了基于docker+ ...

最新文章

  1. asp.net 安装element ui_Vue组件库系列三:打造属于自己的 UI 库文档(新版本的方案)...
  2. 关于对 NUMA 理解(学习笔记,便于以后查阅)
  3. Quartz总结(一):Quartz集成Spring的2个方法
  4. 机器学习(三十一)——Linear Discriminant Analysis
  5. js学习 字符串常用方法
  6. php7 编译 pdo mysql_php7 编译 pdo_mysql 问题, [mysql_driver.lo] Error 1
  7. Babel 6.25 版本发布,JavaScript 编译器
  8. 微信隐藏功能关闭X5内核
  9. 盛大易宝只是陈天桥的梦而已
  10. sqlite3_英英词典
  11. QSettings实现记住密码
  12. 淘宝购买win10激活码流程
  13. 通过lsyncd 设置两个linux(centOS7)服务器之间的目录文件互相实时同步
  14. 如何使用云桌面进行开发?
  15. [Android]混淆Android代码
  16. 企业微信可以统计加班时长吗?如何查看?
  17. 计算机原理-ACC 等14个指令缩写
  18. 书评:薛定谔猫与生物学鸽子:《生命是什么?》出版75周年记
  19. 第十章、正则表达式和JSON
  20. 程序猿敲击代码的指法推荐

热门文章

  1. java 哲学家_哲学家吃饭(Java版)
  2. 旋转导电滑环接线安装使用方法
  3. 记录apache2.4.34更换mpm模式
  4. 微分方程的数值解法与程序实现 pdf_【MATLB数值】—数值计算
  5. 静态分析反调试apk
  6. Altium Designer PCB界面中的对象捕捉快捷键shift+E
  7. 易语言 将abc字符串分隔为单个字符的数组
  8. 手把手教你做安卓端人脸识别应用
  9. c语言字母塔问题,(最新整理)数塔问题C语言
  10. ‘utf-8‘ codec can‘t decode byte 0x87 in position 10: invalid start byte 解决方案