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