如何在 Jenkins 管道脚本中使用扩展选择参数插件?
How can I use the Extended Choice Parameter plugin in a Jenkins pipeline script?
扩展选择参数插件很棒,我在通过 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
就像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}"
并在我的管道的开头调用它。构建开始后不久,系统会要求您提供这些输入。
这是我针对此 pb 的解决方法:
https://gist.github.com/jgraglia/44a7443847cff6f0d87387a46c7bb82f
即:通过声明所有参数来手动实例化参数
我能够用它向我的管道添加一个多清单参数。
自 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
)
])
])
如果您想知道每个可能的参数,您必须refer to the source code。
如果您想知道 "type" 键的每个可能值,have a look at the PT_*
constants.
导航到您的http://jenkins-url.com/pipeline-syntax。
在示例步骤下拉列表中 select 'Properties: Set job properties'
有'This project is parameterized'的复选框,然后可以select添加参数>扩展选择参数。在那里添加菜单项,然后单击 'Generate Pipeline Script' 进行转换。
Trim 所以你删除之前的 'properties([parameters([' 和之后的 '])])':
extendedChoice(defaultValue: 'whatif', description: 'Run as what if?', multiSelectDelimiter: ',', name: 'whatif', quoteValue: false, saveJSONParameterToFile: false, type: 'PT_SINGLE_SELECT', value: 'whatif, LIVE', visibleItemCount: 2)
适合我:
我需要从 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
'''
)
])
])
使用以下代码构建多选复选框参数:
parameters {
extendedChoice description: '', multiSelectDelimiter: ',', name: 'a', quoteValue: false, saveJSONParameterToFile: false, type: 'PT_CHECKBOX', value: 'a,b,c', visibleItemCount: 3
}
在 Jenkins 中看起来像 UI:
使用Declarative Directive Generator生成各种使用扩展选择参数插件的流水线源代码
扩展选择参数插件很棒,我在通过 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
就像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}"
并在我的管道的开头调用它。构建开始后不久,系统会要求您提供这些输入。
这是我针对此 pb 的解决方法:
https://gist.github.com/jgraglia/44a7443847cff6f0d87387a46c7bb82f
即:通过声明所有参数来手动实例化参数
我能够用它向我的管道添加一个多清单参数。
自 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
)
])
])
如果您想知道每个可能的参数,您必须refer to the source code。
如果您想知道 "type" 键的每个可能值,have a look at the PT_*
constants.
导航到您的http://jenkins-url.com/pipeline-syntax。
在示例步骤下拉列表中 select 'Properties: Set job properties'
有'This project is parameterized'的复选框,然后可以select添加参数>扩展选择参数。在那里添加菜单项,然后单击 'Generate Pipeline Script' 进行转换。
Trim 所以你删除之前的 'properties([parameters([' 和之后的 '])])':
extendedChoice(defaultValue: 'whatif', description: 'Run as what if?', multiSelectDelimiter: ',', name: 'whatif', quoteValue: false, saveJSONParameterToFile: false, type: 'PT_SINGLE_SELECT', value: 'whatif, LIVE', visibleItemCount: 2)
适合我:
我需要从 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
'''
)
])
])
使用以下代码构建多选复选框参数:
parameters {
extendedChoice description: '', multiSelectDelimiter: ',', name: 'a', quoteValue: false, saveJSONParameterToFile: false, type: 'PT_CHECKBOX', value: 'a,b,c', visibleItemCount: 3
}
在 Jenkins 中看起来像 UI:
使用Declarative Directive Generator生成各种使用扩展选择参数插件的流水线源代码