如果启动了新的作业构建,我有以下代码可以取消以前的作业构建:
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
,以防止旧版本取消新启动的版本,因为您通常希望每个版本只影响以前的版本。