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

如何在Groovy脚本中动态访问Jenkins Pipeline参数

动态访问Jenkins Pipeline参数值的问题

问题背景

我需要从文件加载基础参数,再通过循环生成额外的多选参数,但遇到了动态访问参数值的问题:循环中通过字符串变量引用参数时,只会输出参数名,而直接写参数名能正确获取选中值。

相关代码

Jenkins Pipeline代码:

pipeline {
    stages {
        stage("prepare") {
            steps {
                script {
                    def params = load("parmas.gy")
                    def yml = readYaml file: "platforms.yml"
                    def selectedJobsMap = yml.selected_jobs
                    def extra_parameters = []

                    selectedJobsMap.each { param ->
                        def platformChoices = selectedJobsMap[param.key].collect { it.name as String }
                        params.add (
                            extendedChoice(
                                name: "${param.key}_PLATFORMS",
                                description: "Select ${param.key} platforms that you want to run tests",
                                type: 'PT_CHECKBOX',
                                multiSelectDelimiter: ',',
                                value: platformChoices.join(',')
                                )
                            )
                           extra_parameters.add("${param.key}_PLATFORMS")
                    }
                    properties([parameters(params)])
                    
                    extra_parameters.each { platformParam ->
                        println("${platformParam}") // 输出参数名字符串
                        println("${WINDOWS_PLATFORMS}") // 输出选中的参数值
                    }
                }
            }
        }
    }
}

platforms.yml文件:

selected_jobs:
    Windows:
        - { name: 'windows10', job: 'app-test_windows10_x86_64_vm' }
        - { name: 'windows2019', job: 'app-test_windows2019_x86_64_vm' }
        - { name: 'windows2022', job: 'app-test_windows2022_x86_64_vm' }
    RHEL:
        - { name: 'rhel_7', job: 'app-test_rhel7_x64_docker' }
        - { name: 'rhel_8', job: 'app-test_rhel_8_arm64_docker' }

现象示例:

def x1 = "WINDOWS_PLATFORMS"
println("${WINDOWS_PLATFORMS}") // 输出如"windows10,windows2019"
println("${x1}") // 输出"WINDOWS_PLATFORMS"

解决方法

Jenkins Pipeline中,所有参数都会被存储在env环境变量对象或params参数对象中,动态访问时需要通过键索引的方式获取值,而不是直接使用字符串变量名。

修改循环中的打印逻辑即可:

extra_parameters.each { platformParam ->
    println("参数名称: ${platformParam}")
    // 方法1:通过env对象获取
    println("参数值(环境变量): ${env[platformParam]}")
    // 方法2:通过params对象获取(更精准,避免环境变量冲突)
    println("参数值(参数对象): ${params[platformParam]}")
}

关键说明

  • env:Jenkins会自动将所有参数注入到环境变量中,适用于大多数常规场景
  • params:专门用于存储Pipeline参数的内置对象,当参数名与系统环境变量名重复时,使用params能确保获取到正确的Pipeline参数值

内容的提问来源于stack exchange,提问作者user14073111

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.13 05:13:32