我有一个Jenkinsfile multibranch管道脚本,它运行在两个不同的Jenkins系统上。 Jenkinsfile依赖于特定的标签名称。在其中一个系统中,基于标签的代理是可用的而在另一个系统中不是(有意)。在前者它运行良好。在没有匹配标签的Jenkins系统中,作业只是挂起,因为它无法找到匹配的代理。
如果找不到标签,有没有办法指定中止(或不启动)构建的选项?
答案 0 :(得分:0)
这里有一些讨论: https://issues.jenkins-ci.org/browse/JENKINS-35905
可能很快就不可能
如果他们正在调用共享库,那么您可以检查标签是否在线/可用,然后使构建失败
def computers = Jenkins.instance.computers
for(computer in computers){
if(computer.isOnline()){
labelStr = computer.node.getLabelString()
}
if labelStr ~= /user input/
break;
}
System.exit(1); // no label
答案 1 :(得分:0)
对于声明性管道,可以使用when{beforeAgent}
测试标签是否存在。
这仅在为agent
指定stage
而不是整个管道的情况下有用。
...并警告这是一个未经检验的假设。
答案 2 :(得分:0)
只是一种解决方法,但是为了避免依赖共享库,我每隔X分钟运行一次以下操作以清理队列中的罪魁祸首:
import hudson.model.*
def q = Jenkins.instance.queue
q.items.each {
if (it =~ /someregex or match all/) {
why = it.getWhy()
if (why =~ /.*There are no nodes with the label.*/) {
println "No node found for $it.task.runId. It's stuck in damn jenkins queue forever and ever. Killing it"
q.cancel(it.task)
}
}
}