You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.19 06:23:42