我正在将https://wiki.jenkins.io/display/JENKINS/GitHub+Branch+Source+Plugin用于PR构建。 Jenkins已设置为定期扫描PR。
[打开PR请求通常会定期进行更新。我的工作是扫描它们并将它们附加到队列中并按顺序运行它们。这很浪费,我只想运行最新的PR版本。实际上,如果作业正在运行,我甚至想中止并运行最新的作业。我可以这样做吗?怎么样?
感谢您的帮助!
我们有可能做同样的事情,这是代码:
def kill_other_builds() {
def jobname = env.JOB_NAME
def my_buildnum = env.BUILD_NUMBER.toInteger()
echo "Job is ${jobname}, build number is ${my_buildnum}"
def job = Jenkins.instance.getItemByFullName(jobname)
for (build in job.builds) {
this_buildnum = build.getNumber().toInteger()
if (!build.isBuilding()) {
println "Build ${this_buildnum} isn't building."
continue;
}
if (my_buildnum == this_buildnum)
{
println "Build ${this_buildnum} is building and it's this build."
continue;
}
else if (my_buildnum < this_buildnum)
{
errorMsg = "A newer build is already scheduled"
currentBuild.result = "ABORTED"
currentBuild.description = errorMsg
error(errorMsg)
}
echo "Kill build ${build} number ${this_buildnum}."
build.displayName += "(stopped by #${my_buildnum})"
build.doStop()
try {
sleep 5
} catch (err) {
String errStr = err.toString()
println errStr
}
}
}