当前位置:  开发笔记 > 前端 > 正文

如果节点脱机,请跳过Jenkins管道步骤

如何解决《如果节点脱机,请跳过Jenkins管道步骤》经验,为你挑选了1个好方法。

我有一个Jenkins管道工作,对于部分构建,它使用一个具有大量停机时间的节点.如果节点处于联机状态并且在节点脱机时跳过而没有使构建失败,我希望执行此步骤.

这是相关的,但不同于跳过Matrix项目的部分问题.

我尝试以编程方式检查节点是否在线状态.

jenkins.model.Nodes.getNode('my-node').toComputer().isOnline()

这与Jenkins安全沙箱相对应:

org.jenkinsci.plugins.scriptsecurity.sandbox.RejectedAccessException: unclassified method java.lang.Class getNode java.lang.String

我尝试设置一个超时,如果节点离线,它将被触发.

try {
    timeout(time: 10, unit: 'MINUTES') {
        node('my-node') {
            // Do optional step
        }
    }
} catch (e) {
    echo 'Time out on optional step. Node down?'
}

这有一个重大缺点.我必须知道该步骤需要的最长时间,然后在节点关闭时等待更长时间.我尝试用"金丝雀"步骤解决这个问题:

try {
    timeout(time: 1, unit: 'SECONDS') {
        node('my-node') {
            echo 'Node is up. Performing optional step.'
        }
    }
    node('my-node') {
        echo 'This is an optional step.'
    }
} catch (e) {
    echo 'Time out on optional step. Node down?'
}

如果节点已启动但正忙于另一个作业,则会跳过该步骤.这是我迄今为止提出的最佳解决方案.有没有办法检查节点是否在线而不使用超时?



1> Lincoln..:

这应该工作:

Jenkins.instance.getNode('my-node').toComputer().isOnline()

参见http://javadoc.jenkins-ci.org/jenkins/model/Jenkins.html


警告说明:我刚刚更新为Jenkins ver。2.32.3,并被告知Jenkins.getInstance(此答案才能正常工作)“可能已引入安全漏洞”。该工具“建议清除”签名。换句话说,此答案不再有效。:(
一个丑陋的丑陋方式是:`https:// YOURJENKINS / computer / YOURSLAVENAME / api / json?tree = offline`将会返回类似以下内容的内容: false}或更简洁:`https:// YOURJENKINS / computer / YOURSLAVE / api / xml?xpath = // offline / text()`将会返回`true`或`false`我说这很丑的原因是您必须提供凭据并使用REST API。
推荐阅读
跟我搞对象吧
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有