如何设置一个并行调用另一个 Jenkins 作业但以数组作为参数的 jenkins 作业



我想构建一个 Jenkins 作业,比如说作业 A。我有另一个 Jenkins 部署作业,比如作业 B。 我有一个 aws cli 命令,它可以获取特定集群下的 ECS 服务的名称,我将其放在一个数组中。 现在,对于数组的每个元素作为参数,我想调用作业 B。 即我想让作业 A 并行调用作业 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

这就是我在 JobA 的 jenkins 管道脚本中执行此操作的方式:

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 服务名称作为参数传递。

最新更新