我正在尝试连接几个Jenkins代理,并在每个代理上运行一些命令。经过研究,follow the answer from this link,下面的Jenkinsfile代码工作正常:
pipeline {
agent none
stages {
stage('Check') {
matrix {
agent {
label "${SLAVE}"
}
axes {
axis {
name 'SLAVE'
values "slv1", "slv2",
"slv3"
}
}
stages {
stage('do something') {
steps {
sh 'hostname'
}
}
}
}
}
}
}
但是我想在做任何事情之前检查每个节点是否在线。我已经尝试过了,但没有任何运气。这是我最近的尝试:
Boolean finalResult = true
def checkStatus(String nodeName){
Node cleanUpNode = Jenkins.instance.getNode(nodeName)
Computer computer = cleanUpNode.toComputer()
if (cleanUpNode == null) {
println("ERROR: Node ${nodeName} doesn't exist")
finalResult = false
continue
}
if (computer.countBusy()) {
println("WARNING: Ignore ${nodeName} as it is busy")
continue
}
if (computer.isOffline())
{
println "Error! Node ${nodeName} is offline.";
finalResult = false
continue
}
return finalResult
}
pipeline {
agent none
stages {
stage('Check') {
matrix {
agent {
label "${SLAVE}"
}
when {
expression { checkStatus(${SLAVE}) == true }
}
axes {
axis {
name 'SLAVE'
values "slv1", "slv2",
"slv3"
}
}
stages {
stage('do something') {
steps {
sh 'hostname'
}
}
}
}
}
}
}
我的第一个想法是创建一个数组来存储所有的节点,然后检查它,并通过axis
中的values
为它赋值。
有人能帮忙吗?先谢了!
1条答案
按热度按时间y53ybaqx1#
重点关注checkStatus方法,它有一些常见的错误,无法工作。对我来说,Groovy沙箱中的工作如下。(您的管理员可能需要批准一些脚本签名)。
因为我使用标签而不是节点名,所以我添加了for循环。对于
#nodesByLabel
调用,您需要安装管道实用程序Jenkins插件。