如果新作业被触发,Jenkins停止先前的作业



当进行新的合并时,前一个作业继续构建,使新作业保持在队列中。

我想要的:当一个新的合并发生时,我想让jenkin专注于使用powershell或cmd停止以前的构建。

这是可能的吗?

问题截图

提前谢谢你。

您可以使用这个示例来中止上一个作业:

pipeline {
agent any
stages {
stage('Abort previous running builds') {
steps {
abortPreviousRunningBuilds()
}
}

stage('Build') {
steps {
sleep(5)
}
}

stage('Test') {
steps {
sleep(5)
}
}
}
}
def abortPreviousRunningBuilds() {
def previousBuild = currentBuild.getRawBuild().getPreviousBuildInProgress()
while (previousBuild != null) {
if (previousBuild.isInProgress()) {
def executor = previousBuild.getExecutor()
if (executor != null) {
echo ">> Aborting older build #${previousBuild.number}"
executor.interrupt(Result.ABORTED, new CauseOfInterruption.UserInterruption("Aborted by newer build #${currentBuild.number}"))
}
}
previousBuild = previousBuild.getPreviousBuildInProgress()
}
}

如果你得到一些RejectedAccessException,你需要通过这种方式允许进程内脚本批准。

或者你可以使用解决方案:install Jenkins plugin - Pipeline: Milestone Step,然后像这样写:

pipeline {
agent any
stages {
stage('Abort previous running builds') {
steps {
abortPreviousRunningBuilds()
}
}

stage('Build') {
steps {
sleep(5)
}
}

stage('Test') {
steps {
sleep(5)
}
}
}
}
def abortPreviousRunningBuilds() {
def buildNumber = env.BUILD_NUMBER as int
if (buildNumber > 1) milestone(buildNumber - 1)
milestone(buildNumber)
}

最新更新