如何获取有关Jenkinsfile(管道)

时间:2018-05-11 13:56:23

标签: jenkins-pipeline

我想在开始新的同一个管道作业运行之前,根据所有并发运行的作业displayName采取一些行动。

无法获得任何令人满意的参考,如果有人尝试了类似的东西请分享。

1 个答案:

答案 0 :(得分:0)

能够编写以下代码来实现我的目标,它工作正常。 捕获将在所有作业中使用相同的Displayname格式,并在循环中标识相同的名称。 这段代码是在共享库vars文件夹示例内编写的:vars / abortPreviousWorklow.groovy。

import hudson.model.Result
import hudson.model.Run
import jenkins.model.CauseOfInterruption.UserInterruption
def call(){
    currentDisplayName = env.GERRIT_PROJECT+' '+env.GERRIT_BRANCH+' '+env.GERRIT_CHANGE_NUMBER
    Run previousBuild = currentBuild.rawBuild.getPreviousBuildInProgress()

    while (previousBuild != null) {
        if (previousBuild.isInProgress()) {
            echo ">>DisplayName of previous Build : ${previousBuild.displayName}"
            if(previousBuild.displayName.find(currentDisplayName)) {
                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()
    }
}