首页 > 解决方案 > 在我的 Jenkins 声明式管道中的多个代理上运行相同的任务

问题描述

我有一个像这样的块:

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()
    }
}

我想通过更改标签以有点像循环的方式运行相同的任务。我想尽可能地消除冗余。

标签: jenkinsjenkins-pipelinejenkins-declarative-pipeline

解决方案


看看这个答案:https ://stackoverflow.com/a/48421660/9498358

如果您不想并行运行阶段(如在链接的答案中),您可以在脚本块内添加一个 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])
            }
        }
    }
}

推荐阅读