如何在groovy脚本中动态访问参数

问题描述 投票:0回答:1

基本上,我有一个场景,我从文件加载一些参数,并使用循环加载其他参数:

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}")
java jenkins groovy jenkins-pipeline jenkins-groovy
1个回答
0
投票

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

© www.soinside.com 2019 - 2024. All rights reserved.