如何用Groovy脚本构建Job?传递Extended Choice Parameters并行执行问题
在Jenkins中用Groovy脚本实现带参数的并行Job运行
当然有办法实现你的需求!我来给你拆解两种常见的方案,分别适配Freestyle Job和Pipeline Job场景,帮你接收Extended Choice参数并触发并行构建:
方案1:Freestyle Job中使用系统Groovy脚本
如果你的第二个Job是Freestyle类型,可以通过Jenkins的核心Groovy API来接收参数并触发并行构建:
步骤1:获取传递的Extended Choice参数
首先在Groovy脚本中获取从第一个Job传递过来的参数,你可以通过构建环境变量或者直接从构建对象中提取:
import hudson.model.* // 获取构建环境,包含所有传递的参数 def env = build.getEnvironment(listener) // 替换成你的Extended Choice参数名称 def extendedParamValue = env.get('YOUR_EXTENDED_PARAM_NAME') // 如果是多选参数,按分隔符拆分(比如逗号) def paramList = extendedParamValue.split(',')
步骤2:并行触发目标Job
接下来利用Jenkins API创建并行任务,为每个参数值触发一次构建:
import jenkins.model.Jenkins // 获取要并行运行的目标Job(替换成你的Job全名) def targetJob = Jenkins.instance.getItemByFullName('TARGET_JOB_NAME') // 准备并行任务列表 def parallelTasks = [] paramList.each { value -> parallelTasks.add { // 构建参数对象 def buildParams = new ParametersAction([ new StringParameterValue('PARAM_FOR_TARGET', value.trim()) ]) // 触发构建,0表示立即执行 targetJob.scheduleBuild2(0, new Cause.UserIdCause(), buildParams) println "Successfully triggered build for parameter: ${value.trim()}" } } // 并行执行所有任务 parallelTasks.parallelEach { task -> task() }
注意事项
- 权限配置:需要在Jenkins的「Manage Jenkins -> In-process Script Approval」中授权相关API(比如
Jenkins.instance、scheduleBuild2),否则脚本会因为权限不足报错。 - 参数格式:根据你的Extended Choice参数配置调整分隔符(比如如果用分号分隔就改成
split(';'))。
方案2:Pipeline Job中使用Groovy(更推荐)
如果你的第二个Job是Pipeline类型,Jenkins原生支持并行步骤,实现起来更简洁:
pipeline { agent any // 定义接收的参数(和第一个Job传递的Extended Choice参数对应) parameters { extendedChoice( name: 'MY_EXTENDED_PARAM', type: 'PT_MULTI_SELECT', // 对应你的参数类型 value: 'Option1,Option2,Option3', delimiter: ',' ) } stages { stage('Run Parallel Builds') { steps { script { // 拆分参数值为列表 def paramValues = params.MY_EXTENDED_PARAM.split(',') // 创建并行任务映射 def parallelJobs = [:] paramValues.each { value -> def trimmedValue = value.trim() parallelJobs["Build_${trimmedValue}"] = { // 触发目标Job并传递参数 build job: 'TARGET_JOB_NAME', parameters: [ string(name: 'TARGET_PARAM', value: trimmedValue) ] } } // 执行并行构建 parallel parallelJobs } } } } }
优势
- 无需额外授权Jenkins API,Pipeline原生支持并行逻辑。
- 内置错误处理机制,可以通过
failFast: false配置允许部分任务失败不影响其他任务。
内容的提问来源于stack exchange,提问作者Manoj Joshi
相关产品推荐
相关产品推荐

