基本上,我有一个场景,我从文件加载一些参数,并使用循环加载其他参数:
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}") // First print
println("${WINDOWS_PLATFORMS}") // Second print
}
}
}
}
}
}
我的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' }
所以,
extra_parameters
是一个如下所示的列表:["WINDOWS_PLATFORMS", "RHEL_PLATFORMS"]
,我的问题是groovy脚本的第一个打印给出的结果与第二个打印不同。基本上,第一次打印将“WINDOWS_PLATFORMS”打印为字符串,第二次打印打印正确的值,该值是存储在 WINDOWS_PLATFORMS 参数后面的值(这是在 Jenkins 作业中选择的值)。
知道如何解决吗?
基本上,这不会打印相同的内容:
def x1 = "WINDOWS_PLATFORMS"
println("${WINDOWS_PLATFORMS}")
println("${x1}")
https://www.jenkins.io/doc/book/pipeline/syntax/#parameters
parameters 指令提供了用户在触发 Pipeline 时应提供的参数列表。这些用户指定参数的值可通过
对象 提供给管道步骤params
所以,之后
parameters {
string(name: 'WINDOWS_PLATFORMS', defaultValue: 'staging', description: '')
}
您应该能够通过
params
变量访问参数值:
println params.WINDOWS_PLATFORMS
println params['WINDOWS_PLATFORMS']
//or dymamically
def key="WINDOWS"
println params["${key}_PLATFORMS"]
我注意到
this
也可以使用,然后使用而不是 params