暇人じゃない

Jenkins でビルドが成功したらシェルスクリプトを実行する

環境: Jenkins 1.421

最近になってようやく、CI (継続的インテグレーション) 用のツールである Jenkins を使い始めました。 Jenkins を触っている中で、「プロジェクトのビルドが成功したら、自動でデプロイを行いたい(シェルスクリプトを叩きたい)」という要望があり、どうしたものかと悩んで Twitter にポストしたところ、良い方法を教えていただきました。

これはよさげです!
@cactusman さん、@aohta さん、どうもありがとうございます!

という事で、これを実現するための手順を…。

Jenkins に 「ビルド用のプロジェクト」と「スクリプト実行用のプロジェクト」を作成します。

test_job の設定

test_job には、ビルドが成功した場合のみ起動するプロジェクトを指定します。
test_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 しましょう!