Jenkins管道脚本-停止先前的构建,并在失败的构建中打印消息

问题描述 投票:0回答:1

所以,我用这段代码启动管道脚本:

node {
if (env.JOB_NAME != 'Company/project/develop' && env.JOB_NAME != 'Company/project/master'){
    def jobName = env.JOB_NAME
    def job = Jenkins.instance.getItemByFullName(jobName)

    for (build in job.builds) {
        if (build.isBuilding() && build != job.builds.first()) {
            println '*' * 30
            println 'All previous builds for this job have been aborted!'
            println '*' * 30
            build.doStop()
        }}
    }
}

而且效果很好。它将停止所有先前针对相同作业名称的构建。这样做的目的是在开发人员推送过多代码时优化Jenkins,但最新推送只是重要的一环。主分支和开发分支不受此规则限制。

我想通过添加中断原因来扩大一点。我想打印到停止的构建中,例如:“此作业已停止,因为已过时...”

我已经尝试了很多关于stackoverflow的内容,但是没有成功。

谢谢

jenkins pipeline abort
1个回答
0
投票

这是我类似功能的实现。它将中止先前运行的构建,并显示原因“被较新的构建#123中止了”

import hudson.model.Result
import hudson.model.Run
import jenkins.model.CauseOfInterruption.UserInterruption

Run previousBuild = currentBuild.rawBuild.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 UserInterruption("Aborted by newer build #${currentBuild.number}"))
        }
    }
    previousBuild = previousBuild.getPreviousBuildInProgress()
}
© www.soinside.com 2019 - 2024. All rights reserved.