在我的Jenkins声明性管道中的多个代理上运行相同的任务

5gfr0r5j  于 2023-10-17  发布在  Jenkins
关注(0)|答案(2)|浏览(150)

我有一个块像:

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

我想运行相同的任务,有点像一个循环,只是改变标签。我想尽可能地消除冗余。

mcdcgff0

mcdcgff01#

看看这个答案:https://stackoverflow.com/a/48421660/9498358
如果你不想并行运行stages(比如在链接的答案中),你可以在脚本块中添加一个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.size(); i++) {
                generateStage(allNodes[i])
            }
        }
    }
}
qq24tv8q

qq24tv8q2#

接受的答案不起作用。特别是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)
                    }
                }
            }
        }
    }
}

相关问题