このブログをご覧のみなさん、こんにちは。

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

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

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

ではどうすれば良いでしょうか?

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

EnvInject Plugin とは?

プロパティファイルから環境変数を読み込むことができるのが特徴で、2015/03/28 現在のバージョンは 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 に引き継がれます。