Groovy 让Jenkins在节点脱机时快速失败
我有一个多任务项目(使用Jenkins多任务插件制作),包含一系列多任务阶段。假设其中一个作业称为subbo01。生成的每个作业都配置了“限制此项目可以运行的位置”选项,以绑定到一个节点。Subbo01与Slave01绑定 我希望这些作业在节点脱机时快速失败,而不是说“(pending-slave01处于脱机状态)”。具体地说,我希望在subbo01中有一个构建尝试的记录,并将构建标记为失败。通过这种方式,我可以配置我的多任务项目来处理我想要的情况,而不是使用Jenkins构建超时插件来中止整个过程Groovy 让Jenkins在节点脱机时快速失败,groovy,jenkins,Groovy,Jenkins,我有一个多任务项目(使用Jenkins多任务插件制作),包含一系列多任务阶段。假设其中一个作业称为subbo01。生成的每个作业都配置了“限制此项目可以运行的位置”选项,以绑定到一个节点。Subbo01与Slave01绑定 我希望这些作业在节点脱机时快速失败,而不是说“(pending-slave01处于脱机状态)”。具体地说,我希望在subbo01中有一个构建尝试的记录,并将构建标记为失败。通过这种方式,我可以配置我的多任务项目来处理我想要的情况,而不是使用Jenkins构建超时插件来中止整个
有人知道在所有节点都脱机的情况下快速生成失败的方法吗?我可以在多任务项目中插入system Groovy脚本来检查所需的节点是否处于脱机状态,但这似乎是在错误的地方重新设计本应是一项功能。我最终创建了这个工作正常的解决方案。Subbo01的第一个构建步骤是执行系统Groovy脚本,以下是脚本:
import java.util.regex.Matcher
import java.util.regex.Pattern
int exitcode = 0
println("Looking for Offline Slaves:");
for (slave in hudson.model.Hudson.instance.slaves) {
if (slave.getComputer().isOffline().toString() == "true"){
println(' * Slave ' + slave.name + " is offline!");
if (slave.name == "Slave01") {
println(' !!!! This is Slave01 !!!!');
exitcode++;
} // if slave.name
} // if slave offline
} // for slave in slaves
println("\n\n");
println "Slave01 is offline: " + hudson.model.Hudson.instance.getNode("Slave01").getComputer().isOffline().toString();
println("\n\n");
if (exitcode > 0){
println("The Slave01 slave is offline - we can not possibly continue....");
println("Please contact IT to resolve the slave down issue before retrying the build.");
return 1;
} // if
println("\n\n");
jenkins管道语句“beforeAgent true”可用于评估进入代理之前的when条件
stage('Windows') {
when {
beforeAgent true
expression { return ("${TARGET_NODES}".contains("windows")) }
}
agent { label 'win10' }
steps {
cleanWs()
...
}
参考: