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)
}
...
}
編集最終的には、拡張された選択パラメータを使用して を使用しました。現時点では パラメータをjenkins-job-builder
サポートしていないため、変更しました。groovyScript
https://review.openstack.org/#q,I0c6ac0b49c24b8d3afbc06b003847de2e043c2b8,n,z
編集上記のリンクは機能しなくなったため、OpenStack への別のリンクを以下に示します。https://review.opendev.org/#/c/477003/しかし、問題の要点は、jenkins-job-builder に「groovyScriptFile」という新しいパラメータを追加し、それがマージされたことです。
ベストアンサー1
ユーザー入力についてはどうでしょうか:
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)
}