我们希望使用里程碑来取消旧的构建。我们使用多分支管道来构建来自Github的每个pull请求。构建在4-5分钟内完成,分为5个阶段。当新的更改被推送到Github(一个新的构建开始)时,我们希望取消当前的构建(无论它处于哪个阶段)。
因此,我们在构建开始时分配一个里程碑。我们使用内部版本号作为里程碑,因此当一个新的构建开始时,它将完成下一个里程碑,因此前一个构建被取消。
问题是管道会立即终止,有时这会使其处于不正确的状态。
我们是否可以将构建配置为等到当前步骤完成后再取消它?
另一种选择是在每个阶段之后都有不同的里程碑。在这种情况下,如果另一个构建完成了当前的里程碑,而只是不进入下一个里程碑,我们不希望取消构建。这个是可能的吗?
提前谢谢你。
发布于 2018-02-24 04:50:28
这可能会有所帮助:
/* This method should be added to your Jenkinsfile and called at the very beginning of the build*/
@NonCPS
def cancelPreviousBuilds() {
def jobName = env.JOB_NAME
def buildNumber = env.BUILD_NUMBER.toInteger()
/* Get job name */
def currentJob = Jenkins.instance.getItemByFullName(jobName)
/* Iterating over the builds for specific job */
for (def build : currentJob.builds) {
/* If there is a build that is currently running and it's not current build */
if (build.isBuilding() && build.number.toInteger() != buildsNumber) {
/* Than stopping it */
build.doStop()
}
}
}发布于 2017-02-25 05:30:01
你说的“不正确的状态”是什么意思,这个问题可以解决吗?
也许你可以通过一个里程碑/锁组合来实现这一点。我们在部署步骤周围使用了锁,这样它就不会被中断。
https://stackoverflow.com/questions/42438476
复制相似问题