从 jenkins 扩展选择参数中获取源值

fetch source values from jenkins extended choice parameter

我添加了一个扩展选择参数。现在源值为 lin1、lin2、lin3,如屏幕截图中所列

现在当我运行, 如果我 select lin1 那么我得到 param3 = lin1,

如果我 select lin1 和 lin2 那么我得到 param2 - lin1,lin2(分隔符是逗号)

这里的问题是,在 jenkins 管道内部如何获取创建参数时设置的所有源值。简而言之,在没有 select 任何复选框的情况下,想要获取列表中可能值的列表

例如: 列表 1 = some_method(参数 3) // 预期输出 >> list1 = [lin,lin2,lin3]

如果描述不清楚,请告诉我。

运行 的用户没有配置访问权限(我们不想给匿名用户配置访问权限)因此 job/config.xml 的想法在这里行不通

我找不到任何变量或方法来获取参数列表。我想通过 paramcurrentBuild 地图上未记录的方法,这在某种程度上是可能的。

您的问题的一个可能解决方案是在管道外部定义地图,然后像这样使用该变量:

def param3Choices = ['lin1', 'lin2', 'lin3']

pipeline {
   parameters {
       choice(name: 'PARAM3', choices: param3Choices, description: '')
   }

   stage('Debug') {
       steps {
          echo param.PARAM3
          print param3Choices
       }
   }
}

根据要求,您还可以动态获取值:

import hudson.model.*
import org.jenkinsci.plugins.workflow.job.*
import com.cwctravel.hudson.plugins.extended_choice_parameter.ExtendedChoiceParameterDefinition

def getJob(name) {
    def hi = Hudson.instance
    return hi.getItemByFullName(name, Job)
}

def getParam(WorkflowJob job, String paramName) {
    def prop = job.getProperty(ParametersDefinitionProperty.class)
    for (param in prop.getParameterDefinitions()) {
        if (param.name == paramName) {
            return param
        }
    }
    return null
}

pipeline {
    agent any

    parameters {
        choice(name: 'FOO', choices: ['1','2','3','4'])
    }

    stages {
        stage('test') {
            steps {
                script {
                    def job = getJob(JOB_NAME)
                    def param = getParam(job, "FOO")
                    if (param instanceof ChoiceParameterDefinition) {
                        // for the standard choice parameter
                        print param.getChoices()
                    } else if (param instanceof ExtendedChoiceParameterDefinition) {
                        // for the extended choice parameter plugin
                        print param.getValue()
                    }
                }
            }
        }
    }
}

如您所见,它需要大量脚本,因此必须禁用 Groovy 沙盒或在脚本批准页面上批准大部分调用。