我正在尝试将旧的詹金斯工作转换为声明性管道代码。
当尝试在脚本中使用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,但解决方案采用脚本化而非声明性的方式。
答案 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 都会返回值。