Jenkins声明性管道中的参数可以是动态的吗?
我希望在运行时用函数填充选项值。下面的代码生成了一个选项列表,但它们似乎过时了--可能是我第一次运行这段代码时生成的。如果AMI列表发生变化,选项保持不变。我希望每次选择build with parameters
时都运行这段代码。
def findAMIs() {
// Find relevant AMIs based on their name
def sout = new StringBuffer(), serr = new StringBuffer()
def proc = '/usr/bin/aws --region eu-west-1 ec2 describe-images \
' --owners OWNER --filter Name=name,Values=PATTERN \
' --query Images[*].{AMI:Name} --output text'.execute()
proc.consumeProcessOutput(sout, serr)
proc.waitForOrKill(10000)
return sout.tokenize()
}
def AMIs = findAMIs().join('\n')
pipeline {
// a declarative pipeline
agent any
parameters {
choice(name: 'Release',
choices: AMIs)
}
...
}
EDIT我最后使用的是jenkins-job-builder
,带有扩展的选择参数。它目前不支持groovyScript
参数,所以我修改了它。https://review.openstack.org/#q,I 0 c6 ac 0 b49 c24 b8 d3 afbc 06 b 003847 de 2 e043 c2 b8,n,z
EDIT上述链接已失效,因此这里是另一个指向openstack的链接:https://review.opendev.org/#/c/477003/但问题的要点是我向jenkins-job-builder添加了一个名为'groovyScriptFile'的新参数,它被合并了。
5条答案
按热度按时间t2a7ltrp1#
那么用户输入:
ppcbkaq52#
还有另一种解决办法:你可以在“pipeline”之前使用“properties”步骤-在那里你也可以使用活动的选择插件:
唯一的问题是,第一次启动构建时,它会失败。第二次启动时,它应该是一个“带参数的构建”。
希望能有所帮助。
w6mmgewl3#
对于任何需要声明性管道语法选项的人,我在another question中找到了一个很好的解决方案,这对我很有帮助。
这是我基于它的建议。您应该能够使用创建
${WORKSPACE}/list
文件的代码生成一个更动态的列表我希望这对你有帮助
dfty9e194#
在我进入同一条船并阅读了https://www.jenkins.io/doc/book/pipeline/jenkinsfile/“处理参数”部分的说明后,我得到了一个非常简单的方法,因为我们可以在其他一切之前运行属性。
把这个快速的例子和修改你的喜好,我正在创建2个多选择选项,一个将是硬编码,另一个将使用在底部的函数(管道节点外)下的选择选项,你可以使用脚本{}步骤。
你也可以把它们放到一个步骤里
请注意,您必须运行它一次,以便下一个作业将获取参数。(只有最新的属性节点将出现在UI中)
使用此方法,您甚至可以决定是否要在UI中显示某个参数。例如
5w9g7ksd5#
2022年更新:最初在2017年的X1 E2 F1 X的X1 E3 F1 X中提到的X1 E0 F1 X(X1 E1 F1 X)已经进化。
其最新的2.60.2版本(2022年6月)确保支持Jenkins 2.335+,因为最近的Jenkins版本确实修改了DOM,如JENKINS-68013所示。
当前示例:
请注意,JENKINS-63284和PR 47将允许Groovy属性的初始管道作业支持。
此功能将启用Jenkinsfile、管道、cron-scheduled和通过其他方式触发的作业,而无需使用Jenkins的GUI/HTML。