Jenkins - Pipeline Retry

Jenkins - Pipeline Retry

引言

日常运行自动化测试用例,通常是晚上定时启动 pipeline job,一个 pipeline 脚本可能会涉及到多个 Job, 最后 post 发邮件汇总测试 report。有时会遇到 Jenkins 环境问题导致某 Job 失败,第二天需要手动触发 job 重跑,这样影响工作效率。那我们是否可以在 pipeline 脚本里自动 retry 呢?

retry

在 Jenkins Pipeline 中,可以使用 retry 指令来重试某个步骤。以下是一个基本的示例:

groovy 复制代码
pipeline {
    agent any

    stages {
        stage('Test') {
            steps {
                retry(3) {
                    // 这里放置你想要重试的步骤
                }
            }
        }
    }
}

在这个示例中,如果步骤失败,Jenkins 会尝试重新运行它,最多重试 3 次。你可以根据需要更改重试次数。

retry 实例

可以运行下面这个 pipeline 脚本实例,其中 Build stage 中有加 retry 3 次。

groovy 复制代码
pipeline {
    agent { label "xxx" }

    stages {
        stage('Preparation') {
            steps {
                echo 'Preparing...'
            }
        }
        stage('Build') {
            steps {
                retry(3) {
                    script {
                        echo "Attempting to build..."
                        // 可能失败的命令
                        sh 'make build'
                    }
                }
            }
        }
        stage('Test') {
            steps {
                echo 'Running tests...'
            }
        }
    }
}

jenkins pipeline 执行 log,Build stage 执行了 3 次均失败,所以 Test stage 将不再执行。

bash 复制代码
20:08:23  [Pipeline] {
20:08:23  [Pipeline] stage
20:08:23  [Pipeline] { (Preparation)
20:08:23  [Pipeline] echo
20:08:23  Preparing...
20:08:23  [Pipeline] }
20:08:23  [Pipeline] // stage
20:08:23  [Pipeline] stage
20:08:23  [Pipeline] { (Build)
20:08:23  [Pipeline] retry
20:08:23  [Pipeline] {
20:08:23  [Pipeline] script
20:08:23  [Pipeline] {
20:08:23  [Pipeline] echo
20:08:23  Attempting to build...
20:08:23  [Pipeline] sh
20:08:24  + make build
20:08:24  make: *** No rule to make target 'build'.  Stop.
20:08:24  [Pipeline] }
20:08:24  [Pipeline] // script
20:08:24  [Pipeline] }
20:08:24  ERROR: script returned exit code 2
20:08:24  Retrying
20:08:24  [Pipeline] {
20:08:24  [Pipeline] script
20:08:24  [Pipeline] {
20:08:24  [Pipeline] echo
20:08:24  Attempting to build...
20:08:24  [Pipeline] sh
20:08:24  + make build
20:08:24  make: *** No rule to make target 'build'.  Stop.
20:08:24  [Pipeline] }
20:08:24  [Pipeline] // script
20:08:24  [Pipeline] }
20:08:24  ERROR: script returned exit code 2
20:08:24  Retrying
20:08:24  [Pipeline] {
20:08:25  [Pipeline] script
20:08:25  [Pipeline] {
20:08:25  [Pipeline] echo
20:08:25  Attempting to build...
20:08:25  [Pipeline] sh
20:08:25  + make build
20:08:25  make: *** No rule to make target 'build'.  Stop.
20:08:25  [Pipeline] }
20:08:25  [Pipeline] // script
20:08:25  [Pipeline] }
20:08:25  [Pipeline] // retry
20:08:25  [Pipeline] }
20:08:25  [Pipeline] // stage
20:08:25  [Pipeline] stage
20:08:25  [Pipeline] { (Test)
20:08:25  Stage "Test" skipped due to earlier failure(s)
20:08:25  [Pipeline] }
20:08:25  [Pipeline] // stage
20:08:25  [Pipeline] }
20:08:26  [Pipeline] // node
20:08:26  [Pipeline] End of Pipeline
20:08:26  ERROR: script returned exit code 2
20:08:26  Finished: FAILURE
相关推荐
陆鳐LuLu40 分钟前
日志管理利器:基于 ELK 的日志收集、存储与可视化实战
运维·elk·jenkins
[奋斗不止]1 小时前
Jenkins 配置 Credentials 凭证
jenkins·jenkins 配置凭证
[奋斗不止]10 小时前
Jenkins 构建 Unity 打包 .apk 同时生成 .aab
jenkins·jenkins 打包 .aab·jenkins导出aab·jenkisn 导出 apk
boy快快长大10 小时前
【Elasticsearch】同一台服务器部署集群
服务器·elasticsearch·jenkins
深情不及里子10 小时前
纯手工搭建整套CI/CD流水线指南
ci/cd·gitlab·jenkins·harbor
梁萌11 小时前
04-DevOps-安装并初始化Jenkins
运维·jenkins·devops
跳跳的向阳花11 小时前
06、ElasticStack系列,第六章:elasticsearch设置密码
大数据·elasticsearch·jenkins
枫叶落雨2221 天前
08-Elasticsearch
运维·jenkins
web150854159351 天前
Spring Boot(十六):使用 Jenkins 部署 Spring Boot
spring boot·后端·jenkins
m0_748255021 天前
Springboot中使用Elasticsearch(部署+使用+讲解 最完整)
spring boot·elasticsearch·jenkins