web-dev-qa-db-ja.com

Jenkinsfileジョブをパラメーター化する方法

私はJenkins Pipelineジョブを持っています。ジョブ間の唯一の違いはパラメーター、単一の「名前」値です。複数ブランチのジョブ名を使用することもできます(ただし、ブランチ名であるJOB_NAMEとして渡されているものではありませんが、残念ながらenvsは解析せずに適切に見えます)。これをJenkinsfileの外側に設定できればすばらしいと思います。それから、同じjenkinsfileをさまざまなジョブすべてに再利用できるからです。

12
xenoterracide

基本的には jenkins共有ライブラリ サンプル名myCoolLibを作成し、 vars の下の1つのファイルに完全な宣言的パイプラインを設定する必要があります。ファイルmyFancyPipeline.groovyを呼び出すとしましょう。

私の例を書きたかったが、実際には ドキュメントはかなりいい なので、そこからコピーします。最初にmyFancyPipeline.groovy

def call(int buildNumber) {
  if (buildNumber % 2 == 0) {
    pipeline {
      agent any
      stages {
        stage('Even Stage') {
          steps {
            echo "The build number is even"
          }
        }
      }
    }
  } else {
    pipeline {
      agent any
      stages {
        stage('Odd Stage') {
          steps {
            echo "The build number is odd"
          }
        }
      }
    }
  }
}

それを使用するJenkinsfile(現在は2行あります)

@Library('myCoolLib') _
evenOrOdd(currentBuild.getNumber())

ここのパラメーターは明らかにint型ですが、任意の型の任意の数のパラメーターにすることができます。

私はこのアプローチを使用しており、3つのパラメーター(2つの文字列と1つのint)を備えたグルーヴィーなスクリプトの1つと、共有ライブラリを介してそのスクリプトを使用する15〜20のJenkinsfileがあり、完璧です。もちろん、動機はプログラミングの最も基本的なルールの1つです(引用ではなく、次のようになります):2つの異なる場所に「同じコード」がある場合、何かが正しくありません。

4
cantSleepNow

これをJenkinsfileに追加します。

properties([
  parameters([
    string(name: 'myParam', defaultValue: '')
  ])
])

次に、ビルドが1回実行されると、ジョブUIに「パラメーターを使用してビルド」ボタンが表示されます。

そこで、必要なパラメータ値を入力できます。

パイプラインスクリプトでは、params.myParamで参照できます。

2
bp2010

オプションがありますこのプロジェクトはパラメーター化されていますパイプラインジョブ構成にあります。必要に応じて、変数名とデフォルト値を記述します。パイプラインでenv.variable_nameを使用してこの変数にアクセスします

0
minas