暇人じゃない

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

環境: Jenkins 1.421

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

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

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

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

  • ビルド用プロジェクト : test_job
  • スクリプト実行用プロジェクト : test_script_job

2011 07 25 1

test_job の設定

test_job には、ビルドが成功した場合のみ起動するプロジェクトを指定します。 test_job の設定を開いて、以下のように設定します。

ビルド後の処理

  • [他のプロジェクトのビルド] にチェックを入れる
  • [ビルドするプロジェクト] に [test_script_job] と入力
  • [成功した場合のみ起動] を選択
  • [保存] をクリックして設定を保存する

2011 07 25 2

test_job の下流プロジェクトに test_script_job が登録されました。

2011 07 25 3

test_script_job のダッシュボードを見てみると、上流プロジェクトに test_job が登録されています。

2011 07 25 4

test_script_job の設定を見てみると、「ビルド・トリガ」の「他プロジェクトのビルド後にビルド」に test_job が登録されています。

2011 07 25 5

testscriptjob の設定

test_script_job には、ビルドが成功した場合に実行したい処理を記述します。

ビルド

  • [ビルド手順の追加] → [シェルの実行] を選択
  • テキストボックスが表示されるので、実行したい処理を記述
  • [保存] をクリックして設定を保存

2011 07 25 6

実際に 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 しましょう!

About

chocoby (GitHub / Twitter)

フリーのソフトウェア開発者です。 Ruby を使った Web 開発を得意としています。