1. ホーム
  2. jenkins

[解決済み] 宣言的なJenkinsパイプラインのステージ間で変数を渡すにはどうしたらいいですか?

2022-10-24 04:37:24

質問

宣言型パイプラインのステージ間で変数を渡すにはどうしたらよいですか?

スクリプト型パイプラインでは、一時ファイルに書き込み、そのファイルを変数に読み込むという手順があるかと思います。

宣言型パイプラインでこれを行うにはどうしたらよいでしょうか。

例:シェルのアクションで作成された変数に基づいて、別のジョブのビルドをトリガーしたいのですが。

stage("stage 1") {
    steps {
        sh "do_something > var.txt"
        // I want to get var.txt into VAR
    }
}
stage("stage 2") {
    steps {
        build job: "job2", parameters[string(name: "var", value: "${VAR})]
    }
}

どのように解決するのですか?

ファイルを使いたい場合(スクリプトは必要な値を生成するものなので)には、次のようにします。 readFile を使うことができます。そうでない場合は sh と共に script というオプションがあります。

// Define a groovy local variable, myVar.
// A global variable without the def, like myVar = 'initial_value',
// was required for me in older versions of jenkins. Your mileage
// may vary. Defining the variable here maybe adds a bit of clarity,
// showing that it is intended to be used across multiple stages.
def myVar = 'initial_value'

pipeline {
  agent { label 'docker' }
  stages {
    stage('one') {
      steps {
        echo "1.1. ${myVar}" // prints '1.1. initial_value'
        sh 'echo hotness > myfile.txt'
        script {
          // OPTION 1: set variable by reading from file.
          // FYI, trim removes leading and trailing whitespace from the string
          myVar = readFile('myfile.txt').trim()
        }
        echo "1.2. ${myVar}" // prints '1.2. hotness'
      }
    }
    stage('two') {
      steps {
        echo "2.1 ${myVar}" // prints '2.1. hotness'
        sh "echo 2.2. sh ${myVar}, Sergio" // prints '2.2. sh hotness, Sergio'
      }
    }
    // this stage is skipped due to the when expression, so nothing is printed
    stage('three') {
      when {
        expression { myVar != 'hotness' }
      }
      steps {
        echo "three: ${myVar}"
      }
    }
  }
}