我有一个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?' }
如果节点已启动但正忙于另一个作业,则会跳过该步骤.这是我迄今为止提出的最佳解决方案.有没有办法检查节点是否在线而不使用超时?
这应该工作:
Jenkins.instance.getNode('my-node').toComputer().isOnline()
参见http://javadoc.jenkins-ci.org/jenkins/model/Jenkins.html