Jenkinsによる環境変数連携の自動化

Jenkinsをカスタマイズして、Gitコマンドを実行(タグ付けなど)→デプロイ→メール通知という具合にかなりCDが便利になってきた。

デプロイ後にメール通知をするが、デプロイした時間をメール通知の本文の中に挿入したい。しかし、デプロイするJobのシェルで以下を実行しても、Job中の変数は次のJob、つまりメール通知のJobに引き継ぐことができない。

$ DEPLOY_TIME = `date +%H:%M`"

ではどうすれば良いか?

Jenkinsを変数を引き継げるようにカスタマイズすれば良い。カスタマイズするにはEnvInject Pluginを使う。

EnvInject Pluginとは?

プロパティファイルから環境変数を読み込むことができるのが特徴で、2015年3月現在のバージョンは1.91.1。

インストール

[Jenkinsの管理]→[プラグインの管理]→[利用可能タブ]を選択して、EnvInject Pluginを選択してインストール。

変数をExportする

シェルの実行で、変数を以下のようにしてファイルに出力する。

echo "DEPLOY_TIME = `date +%H:%M`"> temp.txt

変数をImportする

[環境変数のインジェクト]を選択する。

  • プロパティファイルのパス:Importしたいファイルのパスを記述すると環境変数として定義される。ファイルフォーマットは標準のJavaプロパティファイル形式でファイルパスは絶対パスかワークスペースからの相対パス
  • プロパティ:KEY=VALUE形式で、キーと値を設定できる。環境変数にプロパティの名前でアクセス可能。上記のプロパティファイルで設定したプロパティを使用したり、上書きもできる

後はEmail-extプラグインをインストールしていれば、

${ENV ,var="DEPLOY_TIME"}

と記述すればデプロイ時間が出力される。

まとめ

これらを駆使することで、デプロイした時間などをメール通知に利用可能となる。

EnvInject Pluginの問題点と対策 2015/4/7追記

問題点

EnvInject Pluginを導入すると“すべての”Jobのコンソール出力に以下の出力がされるようになる。

[EnvInject] - Loading node environment variables.

実はこれがかなり曲者で、それぞれのJobで持っている環境を破壊している。そのため、EnvInject Pluginを特に使っていないJobが転けるようになってしまった。

引数を引き継ぎたい場合は、Parameterized TriggerプラグインのParameters from properties fileを利用した方が良い。

対策:Parameterized Triggerプラグインを使用する

変数をExportするには以下を行う。

シェルの実行で、変数を以下のようにしてファイルに出力する。

echo "DEPLOY_TIME = `date +%H:%M`"> temp.txt

変数をImportするには以下を行う。

Parameters from properties fileにtemp.txtのパスを記載すると、次のJobに引き継がれる。