如果标签不匹配,如何中止Jenkins管道构建

时间:2017-07-16 01:40:21

标签: jenkins jenkins-pipeline

我有一个Jenkinsfile multibranch管道脚本,它运行在两个不同的Jenkins系统上。 Jenkinsfile依赖于特定的标签名称。在其中一个系统中,基于标签的代理是可用的而在另一个系统中不是(有意)。在前者它运行良好。在没有匹配标签的Jenkins系统中,作业只是挂起,因为它无法找到匹配的代理。

如果找不到标签,有没有办法指定中止(或不启动)构建的选项?

3 个答案:

答案 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)
    }
  }
}