仅当以前的 Jenkins 作业构建是同一分支时,才取消它



如果启动了新的作业构建,我有以下代码可以取消以前的作业构建:

def cancelPreviousBuilds() {
def jobName = env.JOB_NAME 
def buildNumber = env.BUILD_NUMBER.toInteger() /* Get job name */ def currentJob = 
Jenkins.instance.getItemByFullName(jobName)
for (def build : currentJob.builds) {

if (build.isBuilding() && build.number.toInteger() != buildNumber) {        
build.doStop()
}
}
}

但是,如果是不同的分支,我希望这不会取消以前的作业构建。例如,如果在develop上启动了一个作业构建,然后在master上启动了另一个作业,则不会取消任何作业构建。

您可以访问每个构建的构建参数并比较相关值
可以使用build.getAction(hudson.model.ParametersAction)获取ParameterAction对象,从中可以使用getParameter函数搜索构建对象中的参数
类似于:

@NonCPS
def cancelPreviousBuilds() {
def buildNumber = env.BUILD_NUMBER.toInteger()
def currentJob = Jenkins.instance.getItemByFullName(env.JOB_NAME)
def currentBranch = <BRANCH_PARAM_NAME> // Branch value of the current build
for (def build : currentJob.builds) {
def param = build.getAction(hudson.model.ParametersAction).getParameter('<BRANCH_PARAM_NAME>')
if (build.isBuilding() && build.number.toInteger() > buildNumber && currentBranch == param.value) {
build.doStop()
}
}

另一件小事是,在版本号比较中,最好使用build.number.toInteger() > buildNumber,然后使用build.number.toInteger() != buildNumber,以防止旧版本取消新启动的版本,因为您通常希望每个版本只影响以前的版本。

最新更新