Jenkins 動的宣言型パイプラインパラメータ 質問する

Jenkins 動的宣言型パイプラインパラメータ 質問する

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サポートしていないため、変更しました。groovyScripthttps://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)
}

おすすめ記事