第一次构建后,Jenkins声明性管道动态选择参数不会更新

时间:2019-04-29 07:16:58

标签: jenkins groovy jenkins-pipeline jenkins-declarative-pipeline

我正在尝试将旧的詹金斯工作转换为声明性管道代码。

当尝试在脚本中使用choice参数时,我实现了一个函数,该函数应返回更新的值(如果值不是最新值)-作业将失败。

问题在于,在看起来不错的第一个构建之后,这些值保持静态,之后它们没有得到更新,正如我上面所说的那样-我的工作失败了。 就像我编写的函数在第一次构建时仅运行一次,而不再运行。

我尝试编写代码,以将输出发送到文件并从文件中读取-因此,也许该功能将通过从文件中获取文本来更新-无效。< / p>

我尝试查看Jenkins文档/其他很多线程,但没有发现任何东西。

我的代码如下:

def GetNames() {
    def workspace = "..."
    def proc = "${workspace}/script.sh list".execute()
    return proc.text
}

$ {workspace} -只是我的工作空间,没关系。

script.sh -一个100%有效且经过测试的脚本

返回过程文本-确实返回了值,我已经在我的Jenkins网站/脚本部分中对其进行了测试,并且值确实可以正确返回并更新。

我的参数部分:

parameters {
    choice(name: 'Names', choices: GetNames(), description: 'The names')
}

第一个构建,我得到5个名称,这很好,因为这些是更新的值,第二个构建,我知道有10个值,但我仍然从之前获得5个值,此后的每个构建,我仍然会获得相同的5个名字-它们根本不会更新,该功能也不会再次触发。

似乎这是一个长期运行的问题,仍然没有得到修补,提到此问题的唯一线程是这个: Jenkins dynamic declarative pipeline parameters,但解决方案采用脚本化而非声明性的方式。

1 个答案:

答案 0 :(得分:1)

好吧,我终于弄清楚了,该解决方案将声明性和脚本化方式相结合,

(使用活动参数插件)。

node {
    properties([
        parameters([
            [$class: 'ChoiceParameter', 
                choiceType: 'PT_SINGLE_SELECT', 
                description: 'The names', 
                filterLength: 1, 
                filterable: true, 
                name: 'Name', 
                randomName: 'choice-parameter-5631314439613978', 
                script: [
                    $class: 'GroovyScript', 
                    script: [
                        classpath: [], 
                        sandbox: false, 
                        script: '''
                                    some code.....
                                    return something'''
                    ]
                ]
            ], 
        ])
    ])
}

pipeline {
    agent any
.
.

通过这种方式,每次加载页面时都会启动active参数的脚本部分,并且每次 updated 都会返回值。