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
相关推荐
回眸不遇1 天前
类型的区别和应用场景 nested 每个对象独立存储为隐藏的子文档 适合存储数组 查询的时候有特定的语法 nested查询 且字段要 ...
运维·jenkins
X1A0RAN2 天前
容器化部署 Jenkins 教程
运维·docker·jenkins
BullSmall2 天前
jenkins 全局工具变更后,构建的任务为什么没有刷新过来
运维·jenkins
BullSmall2 天前
报错 libatomic.so.1: No such file or directory
jenkins
ji_shuke3 天前
从零深入:基于 Playwright + Pytest + Allure 的企业级 Web 端到端自动化测试框架实战
前端·自动化测试·docker·jenkins·pytest·allure·playwright
上海安当技术3 天前
老系统零改造接入:旁路代理统一认证实战
java·servlet·架构·kubernetes·jenkins
Mr. zhihao3 天前
Jenkins 从节点连不上主节点?一次网络排查全记录 + 机器间通信“拦截层“全景讲解
网络·servlet·jenkins
砍材农夫4 天前
运维|devops|jenkins构建分支选择及执行日志展示
运维·jenkins·devops
阿标在干嘛4 天前
政策快报平台日志系统的3次演进:从文件到ELK到告警
运维·elk·jenkins
worilb5 天前
Spring Cloud 学习与实践(16):Elasticsearch 商品搜索、中文分词与索引一致性
运维·jenkins