我需要按需创建从机,所以 我正在创建DumbSlave如下:
def createJenkinsNode() {
def sshCredentials = settings['jenkins']['ssh_credentials']
SSHLauncher launcher = new SSHLauncher("10.1.1.10", 22, sshCredentials, "", "", , "", "")
def dumbSlave= new DumbSlave(
"some_name",
"/home/jenkins",
launcher
)
dumbSlave.numExecutors = 1
dumbSlave.mode = Node.Mode.EXCLUSIVE
dumbSlave.labelString = 'some_label'
dumbSlave.retentionStrategy = new RetentionStrategy.Always()
Jenkins.instance.addNode(dumbSlave)
}
之后,我可以在我的管道中使用它并运行一些命令:
....
stage("Build") {
node("some_name") {
echo "Running on the slave machine"
sh "sleep 50"
}
}
一切正常,直到奴隶脱机或在作业执行期间网络连接发生了什么。如果发生这种情况,詹金斯无限地尝试重新连接到奴隶,但如果奴隶或连接永远不会回来,那么这项工作将永远停滞。
我想到的一个解决方案是将代码包含在“timeout”块中的“stage”块中:
....
stage("Build") {
timeout(1) {
node("some_name") {
echo "Running on the slave machine"
sh "sleep 50"
}
}
}
我不喜欢这种方法,因为我必须指定超时而不是事件处理。
我相信有些事情可以在RetentionStrategy.Demand()
的帮助下完成,但我不确定。
如果Jenkins在一两次尝试后无法连接到奴隶,我该怎样才能停止工作?