概要

こんにちは、エンジニアのondaです。モバイルゲーム運用に関わることなら何でもやっている昨今です。 ゲームなどの運用でCI環境(jenkinsなど)を使用することが多いと思いますが、何かこういうことがしたい、という時に標準機能だけでは実現できず、プラグインの力を借りることが多くあります。この記事では実際の業務においてこんな時役立った、と思う便利なjenkinsプラグインを紹介していきたいと思います。 今回はEnvironment Injectorを紹介します。

どんな時に便利?

jenkinsジョブ内でExecute Shellを実行した時などに、実行した結果を次のシェルやPostbuild Processに渡したいことがありますが、例えば変数などに格納しても有効なのはそのシェルの中だけで、変数に格納しても次のプロセスに移ると消えてしまいます。 Environment Injectorを使うと、実行結果などの値をジョブ内で保持し、先のプロセスに渡すことができます。

使用例

リソースビルドのジョブで、出力されたリソースリストの名前をChatworkに通知したいとします。 リソースリストのファイル名は以下のコマンドで得られるとします。
resource_version=`ls -t ../asset-archive/.archive_resource/resource_lists | head -n 1 | tr -d '.dat'`
リソースリストのファイル名が変数resource_versionに格納されますが、この値をChatworkで通知したい場合、Chatwork Pluginに渡す必要がありますが、この変数は上記のコードが書かれたシェルの中でのみ有効で、シェルの実行が終了すると消えてしまいます。 そこでまず、この変数を一時ファイルに書き出します。(一時ファイルは事前に削除する等して初期化しておきます)
echo -e "resource_version=$resource_version" >> variables.txt
次のBuild StepにInject environment variablesを追加し、上記の保存したファイル名を指定します。
これで環境変数resource_versionに先ほど保存した内容が格納され、以後のステップで参照可能になります。 ファイルの中に複数の値が保存されていたら、それが全て環境変数として格納されるので、ファイルに値を保存する際には追記形式で追加していくのが良いでしょう。

結果をChatworkに投稿する

Chatworkへの通知はChatwork Pluginを使用して、以下のようにすればOKです。
Chatworkには以下のようにポストされます。

後続のジョブに結果を渡す

また、次のジョブを自動で起動する際に結果を渡したい場合があります。その場合にもEnvironment Injectorで変数を拾った後、Parameterized Trigger Pluginを使うことで渡すことができます。

まとめ

jenkinsは総体としてとても複雑なシステムで、最初は戸惑ってしまうことが多いと思いますが、ネットで検索すると先人達のノウハウがたくさん出てきますので是非参考にしてみてください。この記事も困っている誰かの助けになれば幸いです。 Tech Inside Drecom の最新の情報は Facebook や Twitter からお届けしています、フォローよろしくおねがいします!