jenkins - 如何在 Jenkins 管道中并行运行 for 循环的每次迭代?

标签 jenkins jenkins-pipeline jenkins-plugins jenkins-groovy

我有一个管道作业,它运行一些操作序列(例如;构建>>运行>>报告)。我已将此序列放入 for 循环中,因为我可以获得一个参数,我应该重复相同的序列多少次。请找到我编写的示例代码。

for (int i = 0; i < <param_val>; ++i){
    node{
        stage('Build') {
            build 'Build'
        }
        stage('Run') {
           build 'Run'
        }
        stage('Reporting') {
           build 'Reporting'
        }
    }
}

现在我的代码正在等待一个完整的序列发生,然后继续运行下一个序列。那很耗时。我有更多从属代理,可以并行运行该序列。如何并行运行 for 循环的每次迭代?

我想到了一个解决方案: 有一个具有实际序列的管道

node{
        stage('Build') {
            build 'Build'
        }
        stage('Run') {
           build 'Run'
        }
        stage('Reporting') {
           build 'Reporting'
        }
    }

有另一个带有 for 循环的管道,它将触发第一个管道并等待: false:

for (int i = 0; i < <param_val>; ++i){
    build(job: 'pipeline-1', wait: false)
}

这有效吗?或者我们是否有更好的选择来对单个管道执行相同的操作?

最佳答案

将代码放在闭包中的循环内:

def oneNode = { c ->
    node {
        build job: 'Build', parameters: [string(name: 'Component', value: c)]
        build 'Run'
        build 'Reporting'
    }
}

然后制作一个你想要同时运行的所有闭包的映射:

def jobs = [:]
def components = params.Componets.split(",")
for (int i = 0; i < components.size(); ++i) {
    def component = components[i].trim()
    jobs[component] = {
        oneNode(component)
    }
}

最后对生成的 map 使用并行步骤:

stage('Build, run, report') {
    <the code from the above steps>
    parallel jobs
}

关于jenkins - 如何在 Jenkins 管道中并行运行 for 循环的每次迭代?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56017701/

相关文章:

jenkins - 在 Jenkins 上使用带有警告插件和管道的 PyLint

if-statement - 如何在 jenkins 脚本管道作业中使用 bool 参数编写条件步骤?

git - Jenkins 并且只构建功能分支?

java - 使用 Jenkins 构建依赖项目

Jenkins sshScript 远程 :remote pass argument

jenkins - 如何在 Jenkinsfile 中捕获分支名称

linux - 无法使用 jenkins 用户启动 Firefox 浏览器

jenkins - 如何正确设置默认值?

jenkins - 是否保证 Jenkins 管道中的所有阶段都将在同一主机上执行?

vbscript - 如何从 Jenkins 运行 Qtp