Jenkins:如果它处于离线状态,请停止尝试重新连接到奴隶

时间:2017-10-02 07:53:18

标签: jenkins jenkins-pipeline

我需要按需创建从机,所以 我正在创建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在一两次尝试后无法连接到奴隶,我该怎样才能停止工作?

0 个答案:

没有答案