运行 我的 Jenkins 声明式管道中多个代理的相同任务
running the same task on multiple agents in my Jenkins declarative pipeline
我有一个像这样的块:
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()
}
}
我想 运行 只需更改标签,就可以像循环一样执行相同的任务。我想尽可能地消除冗余。
看看这个答案:
如果你不想 运行 并行阶段(就像在链接的答案中一样),你可以在脚本块中添加一个 for 循环,所以它看起来像这样:
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])
}
}
}
}
已接受的答案无效。特别是 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)
}
}
}
}
}
}
我有一个像这样的块:
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()
}
}
我想 运行 只需更改标签,就可以像循环一样执行相同的任务。我想尽可能地消除冗余。
看看这个答案:
如果你不想 运行 并行阶段(就像在链接的答案中一样),你可以在脚本块中添加一个 for 循环,所以它看起来像这样:
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])
}
}
}
}
已接受的答案无效。特别是 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)
}
}
}
}
}
}