1. ホーム
  2. bash

[解決済み】shでJenkinsのステージから他のステージに変数を渡す

2022-02-16 22:58:37

質問

私は、shでbashスクリプトの関数を呼び出すJenkinsパイプラインを作成しています。各ステージは、次のステージで必要な値を持ついくつかの変数を設定するbash関数です。

pipeline {
   agent any

   stages {
      stage('setName') {
         steps {
            sh "/home/setname.sh stackoverflow"
         }
      }
      stage('echoName') {
         steps {
            sh "/home/echoname.sh"
         }
      }
   }
}

setname.sh

#!/bin/bash

name=$1

echo "name: $name"

echoname.sh

#!/bin/bash

echo "setName: $name"

上記の非常にシンプルな例では setname.sh name変数を設定しました。その変数の値 ($name) を echoname.sh

実際のコードでは、私はたくさんの変数を持っているので、それぞれの変数の値をファイルで取得することは選択肢ではありません。 さらに、変数は渡された引数に基づいて1つのスクリプトで動的に設定されるので、グローバルに宣言することはできない。

よろしくお願いします。

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

ステージで変数を同じファイルに出力し、その後読み込んで env のように、各ステージの冒頭で

stage('a') {
  steps {
    script {
       loadEnvs('env.props')
    }  
    sh """
      echo var1 = a >> env.props
    """
  }
}

stage('b') {
  steps {
    script {
      loadEnvs('env.props')
    }
    sh """
      echo $env.var1

      echo var2 = b >> env.props
    """
  }
}

def loadEnvs(propFile) {
  props = readProperties(propFile)
  props.each { key, val ->
    env[key] = val
  }
}