Jenkins声明式流水线script块内触发并行下游任务报错咨询
问题原因与解决方案
核心疑问解答
在stage的steps块内部嵌套的script块中,不支持直接使用声明式流水线的parallel + stage语法结构,需要改用脚本式DSL的parallel语法格式。
你遇到的报错就是因为混淆了两种语法的使用场景:声明式的parallel { stage(...){} }结构只能用在流水线顶层的stage同级位置,而script块属于脚本式流水线上下文,这里调用parallel方法需要传入键值对格式的参数,直接传闭包就会触发参数类型不匹配的报错。
修正后的代码示例
把script块里的parallel部分替换为脚本式写法即可:
script { if (ADM_FILES == '0' && FUNC_FILES == '0' && CONT_FILES == '0') { echo "trigger parallel both jobs" // 定义并行任务Map,key为任务名称,value为执行逻辑闭包 def parallelJobs = [:] // 添加第一个并行任务 parallelJobs['Launch JOB admin'] = { build job: 'Downstream_admin_job', parameters: [string(name: 'UPSTREAM_PARAMS', value:"${SRC},${AGV}")] } // 添加第二个并行任务 parallelJobs['Launch job sanity'] = { build job: 'Downstream_sanity_job', parameters: [string(name: 'UPSTREAM_PARAMS', value:"${SRC},${AGV}")] } // 执行并行任务 parallel parallelJobs } if (TOOL_FILES == '0' ) { build job: 'Test_verification_job', parameters: [string(name: 'UPSTREAM_PARAMS', value:"${UPSTREAM_PARAMS}")] } }
额外注意事项
你原代码存在变量名笔误:environment块中定义的变量是ADM_FILES,但后续steps里echo输出的是ADMIN_FILES,运行时会提示变量不存在,需要对应修改一致。
内容的提问来源于stack exchange,提问作者s.patra
相关产品推荐
相关产品推荐

