我有一个像块:
stage('Clone on win10x64-b-ut') {
agent {
node {
label 'win10x64-b-ut'
}
}
steps {
gitClone()
}
}
stage('Clone on win81x64-b-ut') {
agent {
node {
label 'win81x64-b-ut'
}
}
steps {
gitClone()
}
}
我想有点像一个循环的只是改变标签运行相同的任务。我想消除冗余尽可能。
看看这个答案:https://stackoverflow.com/a/48421660/9498358
如果你不希望运行阶段平行(如在链接的答案),你可以添加的脚本块内循环,所以它会是这个样子:
def generateStage(nodeLabel) {
return {
stage("Clone on ${nodeLabel}") {
agent {
node {
label nodeLabel
}
}
steps {
gitClone()
}
}
}
}
// ...
stage('Clone') {
steps {
script {
def allNodes = [win10x64-b-ut', 'win81x64-b-ut']
for (def i = 0; i < allNodes[i]; i++) {
generateStage(allNodes[i])
}
}
}
}
接受的答案是行不通的。 Expecially的DEF的部分。
这是工作:
def generateStage(nodeLabel) {
stage("Runs on ${nodeLabel}") {
node(nodeLabel) {
sh 'hostname'
}
}
}
pipeline {
agent {
node {
label '!docker'
}
}
stages {
stage('Run') {
steps {
script {
nodes = nodesByLabel(label: 'docker')
for (node in nodes) {
generateStage(node)
}
}
}
}
}
}