2017-06-15 4 views
1

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) 
    } 
    ... 
} 

EDIT 私は、拡張選択パラメータで、jenkins-job-builderを使用して終了。これは、現時点ではgroovyScriptパラメータをサポートしていませんので、私は、ユーザー入力について何https://review.openstack.org/#q,I0c6ac0b49c24b8d3afbc06b003847de2e043c2b8,n,z

+0

これはただちに変更されませんか、または変更されません(変更した後にビルドを何回実行しましたか)。私はそれが最初の実行に影響しないことを見てきたと思う。 – burnettk

+0

これは決して変更されません。パラメータを使用してビルドをクリックするたびに、スクリプトがさまざまなオプションを返すことがわかっていても(手動で実行すると)正確に同じオプションが得られます – jarondl

+0

ビルドが実行されるたびにパラメータを再定義できます。ビルドも、再定義もありません。 –

答えて

5

それを修正:

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) 
} 
+0

こんにちは@ダゲット、助けてくれてありがとう。これはこれまでのところ最も近いですが、2つの欠点があります1.宣言型パイプラインでは機能しません(私はそれを修正して動作させようとします)。 2.ユーザーのフローは、パラメータ付きのビルドページよりはるかに良くありません。 宣言的パイプラインで動作するようにしようとしています。 – jarondl

+0

@jarondl - 宣言的な構文の例が使えましたか?もしそうなら、共有してください。 –

+0

こんにちは@EldadAKいいえ、残念ながら私はそれを動作させることができませんでした。私の質問に編集を見てください - 私はJJBを使用して終了しました – jarondl

3

宣言型のパイプラインの構文オプションを必要とする人にとって、私はanother questionに良い解決策を見つけましたそれは私を助けた。

これは私の提案です。あなたは${WORKSPACE}/listファイルを作成するコードと、よりダイナミックなリストを生成することができるはず

pipeline { 
    agent any 
    stages { 
     stage("Release scope") { 
      steps { 
       script { 
        // Prepare a list and write to file 
        sh "echo \"patch\nminor\nmajor\" > ${WORKSPACE}/list" 

        // Load the list into a variable 
        env.LIST = readFile (file: "${WORKSPACE}/list") 

        // Show the select input 
        env.RELEASE_SCOPE = input message: 'User input required', ok: 'Release!', 
          parameters: [choice(name: 'RELEASE_SCOPE', choices: env.LIST, description: 'What is the release scope?')] 
       } 
       echo "Release scope selected: ${env.RELEASE_SCOPE}" 
      } 
     } 
    } 
} 

私は、これは別の解決策がある

2

役に立てば幸い:あなたは、「パイプライン」の前に「プロパティ」ステップを使用することができます - そこにあなたもアクティブな選択肢のプラグインを使用することができます。

properties([ 
    parameters([ 
     [ 
      $class: 'ChoiceParameter', 
      choiceType: 'PT_SINGLE_SELECT', 
      description: '', 
      filterable: false, 
      name: 'Release', 
      randomName: 'choice-parameter-21337077649621572', 
      script: [ 
       $class: 'GroovyScript', 
       fallbackScript: '', 
       script: '''// 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()''' 
      ] 
     ] 
    ]) 
]) 
pipeline { 
    ... 
} 

唯一のことは、最初の時間、あなたのビルドを開始することで、それは失敗するでしょう。 2回目に起動すると、「パラメータ付きビルド」になります。

希望します。

+0

これはまったく動作していません。 'java.lang.IllegalArgumentException:インスタンス化できませんでした'というエラーが発生しましたが、書き込み時に2回目は実行されません。 – yorammi

+0

Jenkins 2.73.2でテストされました(しかし、最初はJenkins 2.6x.x用に書かれました)Active Choice Plugin 1.4で動作します。 パイプラインの段階と手順を書きましたか? –

+0

コメントがあるので何とか解決しました。他のものに切り替える;-) – yorammi

関連する問題