Как настроить задание jenkins, которое вызывает другое задание jenkins параллельно, но с массивом в качестве параметра - PullRequest
0 голосов
/ 01 октября 2019

Я хочу создать задание jenkins, скажем, задание A. У меня есть еще одно задание Jenkins Deploy, скажем задание B. У меня есть команда aws cli, которая возвращает мне имена служб ECS в определенном кластере, я помещаю это вмассив. Теперь для каждого элемента массива в качестве параметра я хочу вызвать задание B. т. Е. Я хочу, чтобы задание A вызывало задание B параллельно, для каждого элемента массива я передаю его в качестве параметра.

Новичок в jenkins, поэтому попробовал использовать "Multi-Job Plugin" и "Parameterized Plugin"

    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 голосов
/ 01 октября 2019

Вот как я это сделал бы в конвейерном скрипте jenkins 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 в качестве параметра, если вам нужно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...