多分支管道中的Jenkins主动选择参数
我想在Jenkins中使用Active Choice参数用于以下目的:多分支管道中的Jenkins主动选择参数,jenkins,jenkins-plugins,jenkins-groovy,Jenkins,Jenkins Plugins,Jenkins Groovy,我想在Jenkins中使用Active Choice参数用于以下目的: 我的项目开发人员希望为不同的分支运行Jenkins构建,这基本上是在喊“Multibranch”!!问题是,如果repo中的最新提交没有标记,开发人员希望在作业页面(您点击构建的地方)中获得通知 如果我让开发人员通过一个参数(比如Git参数)选择他想要构建的分支,然后使用activechoice reference参数引用所选的值,那么我可以很容易地做到这一点 问题是,如果我想使用多分支管道,有没有办法知道在活动选择参数脚本
我的项目开发人员希望为不同的分支运行Jenkins构建,这基本上是在喊“Multibranch”!!问题是,如果repo中的最新提交没有标记,开发人员希望在作业页面(您点击构建的地方)中获得通知 如果我让开发人员通过一个参数(比如Git参数)选择他想要构建的分支,然后使用activechoice reference参数引用所选的值,那么我可以很容易地做到这一点
问题是,如果我想使用多分支管道,有没有办法知道在活动选择参数脚本中选择了哪个分支??实际上,我怀疑是否存在这种可能性,但我想在想到另一种解决方案之前,我会在这里提问。活动选项参数确实很酷,但同时也很奇怪。而且文档也很缺乏,非常非常糟糕 我想我为您提供了一个解决方案,但这取决于您使用的活动选择参数的类型,可能对您有效,也可能不适用。附言:这个解决方案真的不优雅
[
$class: 'ChoiceParameter',
choiceType: 'PT_SINGLE_SELECT',
description: '',
filterable: true,
name: 'TestParam',
description: 'A description.',
script: [
$class: 'GroovyScript',
fallbackScript: [
classpath: [],
sandbox: false,
script: '''
return ['error']
'''
],
script: [
classpath: [],
sandbox: false,
script: '''
def branchNameRex = ".+?/job/.+?/job/([^/]+)/.*"
def threadName = Thread.currentThread().toString()
def branchName = (threadName =~ branchNameRex)[0][1]
return [branchName]
'''
]
]
]
因此,如果您足够幸运,需要将ChoiceParameter
与PT_SINGLE_SELECT
一起使用,并且还处于多分支管道作业中,那么这应该是可行的
推理Thread.currentThread().toString()
返回当前作业的完整路径,其中包括分支名称。使用这个正则表达式,我只得到分支名称,比如feature/something
或main
不幸的是,我用DynamicReferenceParameter
和ET\u-FORMATTED\u-HTML
尝试了它,而Thread.currentThread().toString()
返回了其他东西
这也可能取决于插件的版本,我不确定,但我已经这样做了,它在那个特定的情况下工作
更新
好吧,经过大量的挖掘,我自己也玩了很多,我想我有一个解决办法。您需要两个参数才能使其工作
有一个格式化的\u隐藏的\u HTML
参数类型不会显示给用户。我们将如下定义此参数
[
$class: 'DynamicReferenceParameter',
choiceType: 'ET_FORMATTED_HIDDEN_HTML',
name: 'BranchName',
omitValueField: true,
script: [
$class: 'GroovyScript',
fallbackScript: [
classpath: [],
sandbox: true,
script: '''
return '<p>error</p>'
'''
],
script: [
classpath: [],
sandbox: true,
script: """
return '<input name="value" value="${env.BRANCH_NAME}" type="text">'
"""
]
]
]
[
$class:'DynamicReferenceParameter',
选择类型:“ET\U格式的\U隐藏的\U HTML”,
名称:“BranchName”,
忽略值字段:true,
脚本:[
$class:'GroovyScript',
回退脚本:[
类路径:[],
沙盒:没错,
脚本:“”
返回“错误””
'''
],
脚本:[
类路径:[],
沙盒:没错,
脚本:“”
返回“”
"""
]
]
]
这里有几件重要的事情需要注意
名称
设置为值
“
。它使用字符串插值和${env.BRANCH\u NAME}
。此值起初不存在。只有在按Build键后才会填充
基本上,从第二次构建开始,此参数将保持分支名称不变。如果您有多分支管道作业,这将非常好
之后,您可以将其用作其他反应参数中的参考参数
多亏了的回答,我终于找到了答案。我不知道它是否适合你的需要,但对我来说它是完美的。我也非常需要它。我自己也做了一些尝试。我尽了我所能尝试了一切,而且我有一些经验,但我无法解决它。我会关注这篇文章。我想我有一个解决办法给你,bu对我来说,我不:(嗨,谢谢你的努力!我还想从Jenkins classes tree中得到这个工作的名字,但是我不太擅长Java,所以我想不出来。我会尝试一下,尽管我不认为我会在生产中使用它,因为它看起来不太稳定。如果你愿意联手改进插件,我会很高兴的。Yup,不要在prod中使用它。我很乐意。我搜索了如何帮助插件开发,但没有找到方法。我已经回答了更详细的问题。你的意思是,参数的值将在你第一次运行构建时设置,然后在构建之间填充?这很奇怪。我不会说它奇怪。这种行为很奇怪也适用于参数。如果您在GitHub中定义了带有必须填充的参数的Jenkins文件,并且创建了管道作业,则第一次运行将失败,因为这些参数不会被呈现。您将有一个Build按钮,在第一次运行后,它将转换为BuildWithParameters。这大致相同。