如何在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
相关产品推荐
相关产品推荐

