如何执行 Jenkins 作业直到构建成功

50次阅读
没有评论

问题描述

在使用 Jenkins 进行测试自动化时,希望每天在凌晨 1 点执行作业,并且如果作业失败,希望能够重新执行直到作业成功。用户想知道如何在 Jenkins 中实现这个需求。

解决方案

请注意以下操作注意版本差异及修改前做好备份。

方案1

在 Jenkins 中,可以使用 Pipeline 插件来实现每天在指定时间执行作业,并且在作业失败后重新执行直到作业成功。以下是一个示例 Pipeline 脚本:

pipeline {
    agent any
    triggers {
        cron('0 1 * * *')
    }
    stages {
        stage ('Build') {
            when {
                expression {
                    // 当上一次构建失败时
                    !hudson.model.Result.SUCCESS.equals(currentBuild.rawBuild.getPreviousBuild()?.getResult()) == true
                }
            }
            steps {
                sh "./myjob.sh"
            }
            post {
                failure {
                    // 如果当前作业失败,立即重新触发作业
                    build job: "${JOB_NAME}", wait: false
                }
            }
        }
    }
}

在上面的示例中,我们定义了一个 Pipeline,它使用 cron 触发器在每天凌晨 1 点执行作业。在 Build 阶段中,我们使用 when 条件来判断上一次构建是否失败。如果失败,我们执行作业的脚本。在 post 部分,我们使用 failure 条件来判断当前作业是否失败,如果失败,立即重新触发作业。
如果你想在重新触发作业之前等待一段时间,你可以在 build 步骤中添加 quietPeriod: (seconds) 选项。你可能还需要将以下方法添加到 scriptApproval 中:
如何执行 Jenkins 作业直到构建成功

方案2

另一种方法是使用 Jenkins 的 Naginator 插件来实现重新执行作业的功能。以下是配置 Naginator 插件的步骤:
1. 在 Jenkins 的插件管理器中安装 Naginator 插件。
2. 在作业的后置构建操作中,选择 Retry after the build failure 选项。
如何执行 Jenkins 作业直到构建成功
3. 配置 Retry after the build failure 选项,设置重试的次数和间隔时间。
如何执行 Jenkins 作业直到构建成功
4. 如果作业失败,你可以在构建历史记录中查看是否成功触发了重新执行作业。
如何执行 Jenkins 作业直到构建成功
请注意,Naginator 插件可以根据你的配置在作业失败后自动重新执行作业。这样可以确保作业在成功之前不断重试,直到达到最大重试次数或作业成功为止。
以上是两种在 Jenkins 中实现重新执行作业直到成功的方法。你可以根据你的需求选择适合你的方法。

正文完