Jenkins でビルドが成功したらシェルスクリプトを実行する
環境: Jenkins 1.421
最近になってようやく、CI (継続的インテグレーション) 用のツールである Jenkins を使い始めました。 Jenkins を触っている中で、「プロジェクトのビルドが成功したら、自動でデプロイを行いたい(シェルスクリプトを叩きたい)」という要望があり、どうしたものかと悩んで Twitter にポストしたところ、良い方法を教えていただきました。
@cho_co 別Jobでチェーンさせるのはだめですか?
— さぼてん(さぼ福)しんざき 佐藤太一 (@cactusman) July 11, 2011
@cho_co ビルド・トリガ-他プロジェクトのビルド後にビルド で、実行したいシェルスクリプトだけを動かすジョブを登録するとかですかね?
— ɐʇɥoɐ (@aohta) July 11, 2011
これはよさげです! @cactusman さん、@aohta さん、どうもありがとうございます!
という事で、これを実現するための手順を...。
Jenkins に 「ビルド用のプロジェクト」と「スクリプト実行用のプロジェクト」を作成します。
- ビルド用プロジェクト :
test_job
- スクリプト実行用プロジェクト :
test_script_job
test_job の設定
test_job
には、ビルドが成功した場合のみ起動するプロジェクトを指定します。
test_job
の設定を開いて、以下のように設定します。
ビルド後の処理
- [他のプロジェクトのビルド] にチェックを入れる
- [ビルドするプロジェクト] に [
test_script_job
] と入力 - [成功した場合のみ起動] を選択
- [保存] をクリックして設定を保存する
test_job
の下流プロジェクトに test_script_job
が登録されました。
test_script_job
のダッシュボードを見てみると、上流プロジェクトに test_job
が登録されています。
test_script_job
の設定を見てみると、「ビルド・トリガ」の「他プロジェクトのビルド後にビルド」に test_job
が登録されています。
test_script_job の設定
test_script_job
には、ビルドが成功した場合に実行したい処理を記述します。
ビルド
- [ビルド手順の追加] → [シェルの実行] を選択
- テキストボックスが表示されるので、実行したい処理を記述
- [保存] をクリックして設定を保存
実際に test_job のビルドを実行する
実際にスクリプトが実行されるか確認してみましょう。
test_job
ダッシュボードの「ビルド実行」をクリックしてビルドを実行します。
実行されたビルド(ここでは #4 とします)の 「コンソール出力」 を開いてみると test_script_job
のビルド #8 が実行されている事が確認できます。
ユーザーanonymousが実行
test_script_job #8 の新規ビルドを実行します
Finished: SUCCESS
そして、test_script_job
を確認すると、#8 のビルドが実行されています。
実行されたビルドの「コンソール出力」を開いてみると、上流プロジェクトの test_job
が実行された後に、test_script_job
が実行されている事が確認できます。
上流プロジェクト"test_job"の#8が実行
[test_script_job] $ /bin/sh -xe /tmp/hudson1814508730400442805.sh
+ echo 'Hello, World!'
Hello, World!
Finished: SUCCESS
設定で記述したシェルスクリプトが実行されていますね。 あとは、好きなように実行させたい処理を記述してあげれば良いです。
1 つのジョブ内で完結できるのが一番スマートで良いかなとは思いましたが、こっちの方が処理が別れていて見やすいかも知れませんね。
もっと良い方法があれば教えていただけると嬉しいです! みんなで Jenkins しましょう!