30

扩展选择参数插件很棒,我在通过 UI https://wiki.jenkins-ci.org/display/JENKINS/Extended+Choice+Parameter+plugin配置的作业中使用它

但是,我正在努力让它在Jenkinsfile样式管道脚本中工作。由于 Jenkins 管道语法生成器创建了以下代码段,因此扩展选择参数插件似乎尚未与管道脚本完全兼容:

parameters([<object of type com.cwctravel.hudson.plugins.extended_choice_parameter.ExtendedChoiceParameterDefinition>])

如果我手动创建参数,我会得到与https://issues.jenkins-ci.org/browse/JENKINS-32188中提到的相同的行为

org.kohsuke.stapler.NoStaplerConstructorException: There's no @DataBoundConstructor on any constructor of class 

有谁知道可以解决ExtendedChoiceParameterDefinition不使用问题的任何解决方法@DataBoundConstructor

  • 詹金斯 2.19.2
  • 扩展选择参数插件 0.75
4

6 回答 6

24

自 2019 年 4 月 2 日以来,由于此提交,现在有可能:https ://github.com/jenkinsci/extended-choice-parameter-plugin/pull/25

例如,您可以像这样使用它:

properties([
    parameters([
        extendedChoice( 
            name: 'PROJECT', 
            defaultValue: '', 
            description: 'Sélectionnez le projet à construire.', 
            type: 'PT_SINGLE_SELECT', 
            groovyScript: valueKeysScript,
            descriptionGroovyScript: valueNamesScript
        )
    ])
])

如果你想知道每一个可能的参数,你必须参考源代码。如果您想知道“类型”键的所有可能值,请查看PT_*常量

于 2019-05-13T13:38:17.903 回答
6

这是我对此 pb 的解决方法:

https://gist.github.com/jgraglia/44a7443847cff6f0d87387a46c7bb82f

即:通过声明所有参数手动实例化参数

我能够使用它向我的管道添加一个多核对表参数。

于 2017-07-11T10:40:28.870 回答
4

导航到您的http://jenkins-url.com/pipeline-syntax

在示例步骤下拉列表中选择“属性:设置作业属性”

'This project is parameterized' 有一个复选框,然后您可以选择 Add parameter > Extended Choice Parameter。在那里添加菜单项,然后单击“生成管道脚本”进行转换。

修剪它,以便您删除 'properties([parameters([' before and the '])])' after:

extendedChoice(defaultValue: 'whatif', description: 'Run as what if?', multiSelectDelimiter: ',', name: 'whatif', quoteValue: false, saveJSONParameterToFile: false, type: 'PT_SINGLE_SELECT', value: 'whatif, LIVE', visibleItemCount: 2)

在此处输入图像描述

于 2019-11-01T23:15:50.767 回答
2

就像 mkobit 所说,目前无法使用扩展选择插件作为构建参数。

我喜欢用作解决方法的是如下构造

timeout(time: 5, unit: TimeUnit.MINUTES) {
    def result = input(message: 'Set some values', parameters: [
        booleanParam(defaultValue: true, description: '', name: 'SomeBoolean'),
        choice(choices: "Choice One\nChoice Two", description: '', name: 'SomeChoice'),
        stringParam(defaultValue: "Text", description: '', name: 'SomeText')
    ]) as Map<String, String>
}

echo "${result.SomeBoolean}, ${result.SomeChoice}, ${result.SomeText}"

并在我的管道开始时调用它。然后,在构建开始后不久,您就会被要求提供这些输入。

于 2017-07-03T08:12:20.440 回答
1

为我工作:

我需要从 Nexus Repo 中检索工件的所有版本号:

 properties ([
    parameters([
        choice(choices: ['PROD', 'DEV', 'QA'], description: '', name: 'ParamEnv' ),   
        string(name: 'ParamVersion', defaultValue: '', description: 'Version to deploy'),
        extendedChoice(
            name: 'someName',
            description: '',
            visibleItemCount: 50,
            multiSelectDelimiter: ',',
            type: 'PT_SINGLE_SELECT',
            groovyScript: '''
            import groovy.json.JsonSlurper
                List<String> nexusPkgV = new ArrayList<String>()        
                def pkgObject = ["curl", "https://xxxx:xxxx@xxxxxxxxxx"].execute().text
                def jsonSlurper = new JsonSlurper()
                def artifactsJsonObject = jsonSlurper.parseText(pkgObject)
                def dataA = artifactsJsonObject.items
                for (i in dataA) {
                    nexusPkgV.add(i.version)
                }
            return nexusPkgV
            '''
        )
    ])
]) 
于 2019-12-18T14:01:33.723 回答
1

使用以下代码构建多选复选框参数:

parameters {
  extendedChoice description: '', multiSelectDelimiter: ',', name: 'a', quoteValue: false, saveJSONParameterToFile: false, type: 'PT_CHECKBOX', value: 'a,b,c', visibleItemCount: 3
}

它看起来像在 Jenkins UI 中:

在此处输入图像描述

使用声明性指令生成器生成各种使用扩展选择参数插件的管道源代码

在此处输入图像描述

于 2020-06-09T13:25:28.597 回答