Jenkins声明性管道中的参数可以动态吗?
我希望选择选项值在运行时由函数填充。以下代码确实生成了选项列表,但它们似乎过时了- 可能是在我第一次运行此代码时生成的。如果AMI列表更改,则选择将保持不变。我希望每次选择都运行此命令build with parameters。
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,I0c6ac0b49c24b8d3afbc06b003847de2e043c2b8,n,z
jenkins-job- builder
groovyScript
编辑 上面的链接已失效,因此这是指向openstack的另一个链接:https ://review.opendev.org/#/c/477003/ 但问题的要点是我向jenkins-job-builder添加了新参数名为“ groovyScriptFile”,已合并。
用户输入呢?
def findAMIs() { return UUID.randomUUID().toString().split('-').join('\n') } node{ def userInput = input( id: 'userInput', message: 'input parameters', parameters: [ [ $class: 'ChoiceParameterDefinition', name: 'ami', choices: findAMIs(), description: 'AMI', ], ] ) echo ("Selected AMI :: "+userInput) }