【问题标题】:Jenkins pipeline script - stop previous build, and print message in failed buildJenkins 管道脚本 - 停止先前的构建,并在构建失败时打印消息
【发布时间】:2020-06-16 11:41:46
【问题描述】:

所以,我用这段代码开始我的管道脚本:

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 jenkins-pipeline abort


    【解决方案1】:

    这是我对类似功能的实现。它将中止先前正在运行的构建,并显示原因“被较新的构建 #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()
    }
    

    【讨论】:

    • 您好,感谢您的发帖。此代码有效,但由于某种原因,它不会打印“被较新的构建 #123 中止”,而是打印“被未知中止”...
    • @aadlv 正确的消息将显示在状态页面中,在控制台输出中您只会看到 Aborted by unknown。
    • 这对我不起作用:org.jenkinsci.plugins.scriptsecurity.sandbox.RejectedAccessException: Scripts not permitted to use method hudson.model.Run getPreviousBuildInProgress
    • ^ 该脚本安全异常需要 Jenkins 管理员解决。他们有一个管理门户,可以进入并批准在 Jenkins 沙箱中运行的潜在危险脚本。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-12-17
    • 2017-07-28
    • 1970-01-01
    • 2014-01-09
    • 2022-10-05
    • 1970-01-01
    相关资源
    最近更新 更多