Jam*_*ble 9 jenkins jenkins-pipeline
我有一个Jenkins管道工作,对于部分构建,它使用一个具有大量停机时间的节点.如果节点处于联机状态并且在节点脱机时跳过而没有使构建失败,我希望执行此步骤.
这是相关的,但不同于跳过Matrix项目的部分问题.
我尝试以编程方式检查节点是否在线状态.
jenkins.model.Nodes.getNode('my-node').toComputer().isOnline()
Run Code Online (Sandbox Code Playgroud)
这与Jenkins安全沙箱相对应:
org.jenkinsci.plugins.scriptsecurity.sandbox.RejectedAccessException: unclassified method java.lang.Class getNode java.lang.String
Run Code Online (Sandbox Code Playgroud)
我尝试设置一个超时,如果节点离线,它将被触发.
try {
timeout(time: 10, unit: 'MINUTES') {
node('my-node') {
// Do optional step
}
}
} catch (e) {
echo 'Time out on optional step. Node down?'
}
Run Code Online (Sandbox Code Playgroud)
这有一个重大缺点.我必须知道该步骤需要的最长时间,然后在节点关闭时等待更长时间.我尝试用"金丝雀"步骤解决这个问题:
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?'
}
Run Code Online (Sandbox Code Playgroud)
如果节点已启动但正忙于另一个作业,则会跳过该步骤.这是我迄今为止提出的最佳解决方案.有没有办法检查节点是否在线而不使用超时?
小智 14
为此有一个管道调用。
nodesByLabel 'my-node'
Run Code Online (Sandbox Code Playgroud)
[]如果没有节点在线则返回;否则返回arraylist在线实例。
Lin*_*oln 10
这应该工作:
Jenkins.instance.getNode('my-node').toComputer().isOnline()
参见http://javadoc.jenkins-ci.org/jenkins/model/Jenkins.html
小智 5
我只是这样做了:
pipeline {
agent none
environment { AGENT_NODE = "somenode" }
stages {
stage('Offline Node') {
when {
beforeAgent true
expression {
return nodesByLabel(env.AGENT_NODE).size() > 0
}
}
agent {
label "${env.AGENT_NODE}"
}
steps {
...
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4961 次 |
| 最近记录: |