如何设置并行调用另一个詹金斯作业但使用数组作为参数的詹金斯作业

时间:2019-09-30 22:54:32

标签: jenkins jenkins-pipeline jenkins-plugins jenkins-groovy jenkins-cli

我想建立一个詹金斯工作,例如工作A。我还有另一个詹金斯部署工作,例如工作B。 我有一个aws cli命令,可让我获取特定群集下的ECS服务的名称,我将其放在一个数组中。 现在,对于数组的每个元素作为参数,我要调用作业B。 即我想让Job A并行调用Job B,对于数组的每个元素,我都将其作为参数传递给它。

jenkins的新手,因此尝试使用“多作业插件”和“参数化插件”

    pipeline {
    agent any
    stages {
        stage('Run JobB') {
            steps {
                script{
                    def ecs_services = ['service1', 'service2', 'service3']
                    for (int i = 0; i < ecs_services.size(); i++) {
                        def service = ecs_services[i]
                        ecs["${service}"] = build job: 'JobB' , parameters: [name: 'foo', value: 'bar']
                    }
                    failFast: true
                    parallel ecs
                }
            }
        }
    }
    }

something  as simple as, also errors out

    pipeline {
    agent any 
    stages {
        stage('Stage 1') {
            steps {
                echo 'Hello world!' 
            }
        }
     }
    }




Started by user ops
[BFA] Scanning build for known causes...
[BFA] No failure causes found
[BFA] Done. 0s
org.codehaus.groovy.control.MultipleCompilationErrorsException: startup failed:
WorkflowScript: 2: Invalid argument for agent - '${any}' - must be map of config options or bare none. @ line 2, column 11.
       agent any 
             ^

1 error

    at org.codehaus.groovy.control.ErrorCollector.failIfErrors(ErrorCollector.java:310)
    at org.codehaus.groovy.control.CompilationUnit.applyToPrimaryClassNodes(CompilationUnit.java:1085)
    at org.codehaus.groovy.control.CompilationUnit.doPhaseOperation(CompilationUnit.java:603)
    at org.codehaus.groovy.control.CompilationUnit.processPhaseOperations(CompilationUnit.java:581)
    at org.codehaus.groovy.control.CompilationUnit.compile(CompilationUnit.java:558)
    at groovy.lang.GroovyClassLoader.doParseClass(GroovyClassLoader.java:298)
    at groovy.lang.GroovyClassLoader.parseClass(GroovyClassLoader.java:268)
    at groovy.lang.GroovyShell.parseClass(GroovyShell.java:688)
    at groovy.lang.GroovyShell.parse(GroovyShell.java:700)
    at org.jenkinsci.plugins.workflow.cps.CpsGroovyShell.reparse(CpsGroovyShell.java:67)
    at org.jenkinsci.plugins.workflow.cps.CpsFlowExecution.parseScript(CpsFlowExecution.java:410)
    at org.jenkinsci.plugins.workflow.cps.CpsFlowExecution.start(CpsFlowExecution.java:373)
    at org.jenkinsci.plugins.workflow.job.WorkflowRun.run(WorkflowRun.java:213)
    at hudson.model.ResourceController.execute(ResourceController.java:97)
    at hudson.model.Executor.run(Executor.java:429)
    Finished: FAILURE

1 个答案:

答案 0 :(得分:0)

这就是我在JobA的詹金斯管道脚本中要做的事情:

pipeline {
        agent {
            node {
                label "master"  //change this as per your agent label
            }
        }
    stages {
        stage('Run JobB') {
            steps {
                script{
                    def ecs = [:]
                    def ecs_services = ['service1', 'service2', 'service3']
                    for (int i = 0; i < ecs_services.size(); i++) {
                        def service = ecs_services[i]
                        ecs["${service}"] = build job: 'JobB' , parameters: [name: 'string1', value: 'foo']
                    }
                    ecs.failFast: true
                    parallel ecs
                }
            }
        }
    }
}

如果需要,可以将ecs服务名称作为参数传递。