Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/jenkins/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
多分支管道中的Jenkins主动选择参数_Jenkins_Jenkins Plugins_Jenkins Groovy - Fatal编程技术网

多分支管道中的Jenkins主动选择参数

多分支管道中的Jenkins主动选择参数,jenkins,jenkins-plugins,jenkins-groovy,Jenkins,Jenkins Plugins,Jenkins Groovy,我想在Jenkins中使用Active Choice参数用于以下目的: 我的项目开发人员希望为不同的分支运行Jenkins构建,这基本上是在喊“Multibranch”!!问题是,如果repo中的最新提交没有标记,开发人员希望在作业页面(您点击构建的地方)中获得通知 如果我让开发人员通过一个参数(比如Git参数)选择他想要构建的分支,然后使用activechoice reference参数引用所选的值,那么我可以很容易地做到这一点 问题是,如果我想使用多分支管道,有没有办法知道在活动选择参数脚本

我想在Jenkins中使用Active Choice参数用于以下目的:
我的项目开发人员希望为不同的分支运行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',
回退脚本:[
类路径:[],
沙盒:没错,
脚本:“”
返回“错误”

” ''' ], 脚本:[ 类路径:[], 沙盒:没错, 脚本:“” 返回“” """ ] ] ]
这里有几件重要的事情需要注意

  • 返回类型必须是input类型,否则将无法访问其值
  • 它需要将属性
    名称
    设置为
  • 这些在中进行了描述。 3.请注意脚本的三重双引号
    。它使用字符串插值和
    ${env.BRANCH\u NAME}
    。此值起初不存在。只有在按Build键后才会填充

    基本上,从第二次构建开始,此参数将保持分支名称不变。如果您有多分支管道作业,这将非常好

    之后,您可以将其用作其他反应参数中的参考参数


    多亏了的回答,我终于找到了答案。我不知道它是否适合你的需要,但对我来说它是完美的。

    我也非常需要它。我自己也做了一些尝试。我尽了我所能尝试了一切,而且我有一些经验,但我无法解决它。我会关注这篇文章。我想我有一个解决办法给你,bu对我来说,我不:(嗨,谢谢你的努力!我还想从Jenkins classes tree中得到这个工作的名字,但是我不太擅长Java,所以我想不出来。我会尝试一下,尽管我不认为我会在生产中使用它,因为它看起来不太稳定。如果你愿意联手改进插件,我会很高兴的。Yup,不要在prod中使用它。我很乐意。我搜索了如何帮助插件开发,但没有找到方法。我已经回答了更详细的问题。你的意思是,参数的值将在你第一次运行构建时设置,然后在构建之间填充?这很奇怪。我不会说它奇怪。这种行为很奇怪也适用于参数。如果您在GitHub中定义了带有必须填充的参数的Jenkins文件,并且创建了管道作业,则第一次运行将失败,因为这些参数不会被呈现。您将有一个Build按钮,在第一次运行后,它将转换为BuildWithParameters。这大致相同。