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

其他两篇相关文章为

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

GitLab 自动触发 Jenkins 构建

配置Jenkins Job(初级)

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

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

Remote Access API

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

在这里插入图片描述

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

    test: # 使用jenkins远程构建
      stage: test
      script:
        - 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 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()去掉了结果前后万恶的空格,
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

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
Jenkins、GitLab和Kubernetes(简称k8s)是现代软件开发中常用的工具和技术,用于实现持续集成(CI)和持续部署(CD)流水线Jenkins是一个开源的自动化服务器工具,提供了丰富的插件和集成能力。它可以根据代码提交或定时触发构建和部署任务,并提供了丰富的报告和可视化界面用于监控和分析构建过程的状态。Jenkins还支持多个环境的部署,可以用于构建、测试和发布软件。 GitLab是一个基于Git的源代码管理平台,它提供了Git仓库的托管服务和代码协作功能。同时,GitLab还集成了CI/CD功能,允许在代码提交到仓库时自动触发构建和部署流水线。可以配置GitLab与Jenkins进行集成,使得代码提交后可以自动触发Jenkins的构建任务。 k8s是一个开源容器编排平台,用于管理和自动化容器化应用程序的部署、扩展和操作。k8s提供了强大的资源调度和管理能力,可以帮助开发人员将应用程序部署到不同的环境中,并按需扩展或回收资源。在CI/CD流水线中,k8s可以用于部署和运行构建好的应用程序,确保在不同环境中的一致性。 综上所述,Jenkins、GitLab和k8s组合可以实现一个完整的CI/CD流水线。当代码提交到GitLab时,GitLab可以触发Jenkins的构建任务。Jenkins可以根据需要进行构建、测试和部署。最后,k8s可以将构建好的应用程序部署到不同环境中运行。这个流水线可以实现自动化的构建、测试和部署,并提供了监控和报告功能,提高了开发效率和软件质量。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值