うさぎ組

ソフトウェア開発、チームによる製品開発、アジャイル、ソフトウェアテスト

(2年前に)VCSへのコミットを契機にJenkinsでビルドしてみた

2年前に書いていた下書きがあったので、どうせなら公開しておきます。
NetBeans好きな自分が懐かしいです。
見ていて思ったのは、今ならEmmaではなく、Cobertunaつかうなーとかかな。
以下が下書きの内容。


操作の流れは
1.プロジェクトで何かの変更(プロダクトコードの変更、テストコードの変更、リソースファイルの変更)を行う
2.Mercurialにcommit
3.Mercurialがcommitを契機にJenkinsのジョブをコール
4.JenkinsがGradleでビルドを実行する
もしジョブが失敗したらJenkinsからメールが送られる
になります。

GitやSubversionでJenkinsのジョブをコールする方法は調べていません。
みんなでMercurialを使いましょう。(お

ビルド時に実行される内容は
1.静的解析実行(checkstyleFindbugs、PMD、CPD)
2.コンパイル実行
3.JUnit実行
4.カバレッジ率測定(Emma)


今回はcommitを契機にしますが、
例えば、commitではなくpushしたタイミングとかpushされたタイミングとかも出来ます。

インストール、ダウンロードが必要なもの

JDK6
JUnit4
Gradle
Mercurial
Jenkins

以下の説明ではRabbitプロジェクトをもとに書いているので、Rabbitが使用されている部分は自分のプロジェクト名に変更してください。

プロジェクトの構成

Rabbit
build ビルド成果物
config 設定ファイル
src プロダクトコード
test テストコード
lib プロダクトコード用のライブラリ
testlib テストコード用のライブラリ
builg.gradle ビルドスクリプト
emma.gradle Emma設定スクリプト
findbugs.gradle Findbugs設定スクリプト
pmd.gradle PMD設定スクリプト

Jenkinsで使用したプラグイン

Gradle
Emma
JUnit
CPD
PMD
Findbugs

Mercurialリポジトリの.hg配下のhgrcファイルに

[hooks]
commit.ci = wget -q -O nul http://localhost:8080/job/Rabbit/build?delay=0sec

を追加

です。





MercurialとかJenkinsとかJavaとかのインストールは割愛!多分かんたん!
WindowsだとTortoiseHgとJenkins.warとJREとGradleがあれば大丈夫な気がします。
TortoiseHgはとっても使いやすいのでWindows環境であれば必ずいれましょう。
Javaのプロジェクトの作成なども割愛します。
なんかよくわからない人はとりあえず、NetBeansをインストールしてプロジェクトつくってください。
NetBeansを起動したら[新規プロジェクト]をクリックしたらダイアログが出るので[Javaアプリケーション]を選択して作成。
NetBeansかわいいよNetBeans。(7.0よろしくね!
Eclipse派とかIntelliJ派の人もつべこべ言わずにNetBeansをインストールしてください。(うそです。


んでもって、適当にプロダクトコード書いて、適当にテストコード書いてください。
ではローカルでビルドさせてみましょう。
プロジェクトのルートディレクトリにGradleスクリプトを置きましょう。説明がまどろっこしいのでとりあえずgistとかに置いておきました。なんかダウンロードして使ってみてください。
builg.gradle:https://gist.github.com/32b4f2b7db879e59e53d
emma.gradle:https://gist.github.com/e9085a7e277bcf0e306c
findbugs.gradle:https://gist.github.com/5e09087584cf5394f0ce
pmd.gradle:https://gist.github.com/3759ceb96323c4c1e09e


build.gradleを実行するとコンパイル、テストが行われます。
全て成功するとbuildディレクトリが生成されていて、build/libs/Rabbit-1.0.jarとか出来ていたりするはずです。
build.gradle


build.gradleでは引数なしで実行するとdefaulttasksで定義されているtaskが実行されます。
ローカルの実行では静的解析以外を実行するようにしています。
Jenkinsで実行する場合はgradleの起動引数を"ci"と指定することでciタスク(build.gradle内で定義している)を実行します。






次にMercurialリポジトリをつくってファイルをバージョン管理します。
まずはMercurialリポジトリを作成します。

cd /Users/kyon/Rabbit # プロジェクトのルートディレクトリに移動
hg init                          # リポジトリ作成


次にMercurialの管理対象外ファイルを指定しましょう。
ここではNetBeansで作成されるプロジェクトファイル、コンパイル結果などを対象とします。
プロジェクトのルートディレクトリに".hgignore"というテキストファイルを作成して次のように編集して保存します。

ではリポジトリにコミットします。

hg addremove              # バージョン管理されていないファイルを全て管理対象に追加、バージョン管理されていて削除されているファイルを全て管理対象から削除
hg commit -m init        # 以前のリビジョンから変更のあったファイルをリポジトリにコミット。この場合はaddremoveで追加されたファイルを全てコミット。-m 以降はコミットコメント。


VCSで管理するファイルにIDEで自動生成されるファイルなどを含めるかどうかはプロジェクト次第だと思います。
ちなみにMercurialのコマンド基本操作は次の通り
hg init #リポジトリを現在のディレクトリ配下に作成
hg clone # リポジトリを現在のディレクトリに複製
hg add # バージョン管理対象外ファイルを管理対象ファイルに追加
hg remove # バージョン管理対象ファイルをバージョン管理対象から排除
hg addremove # addとremoveを同時に行う
hg commit # コミット
hg revert # 現在の変更を削除し、以前のリビジョンに戻す。
hg pull # リモートリポジトリからチェンジセットを引っ張ってくる
hg push # リモートリポジトリにチェンジセットを追加する
hg update -r XXXXX # 指定したリビジョン番号(XXXXX)にワーキングディレクトリを更新


リポジトリを作成すると同じディレクトリに.hgディレクトリが作成されているので、
そのディレクトリにファイル名を"hgrc"としたテキストファイルを作成します。
中身は次の2行を追加してください。

[hooks]
commit.ci = wget -q -O nul http://localhost:8080/job/Rabbit/build?delay=0sec


wgetコマンドがインストールされていない環境であればインストールしてください。
WindowsであればGow、GnuWin32、Gnuのいずれかをダウンロードして、PATHに通してください。
Macならhomebrewなどでインストール出来ます。



リポジトリが出来たのでJenkinsを設定しましょう。
Jenkinsの「プラグインの管理」から
次のプラグインをインストールしてください。インストールが終わったらJenkinsを再起動。
Gradle
Emma
JUnit
PMD
CPD
FIndbugs

再起動が完了したら、ジョブを作成します。
ジョブ名はRabbitです。(プロジェクト名と同一である必要はありません。
ジョブの設定画面は次のようにします。



保存をクリックしたら試しにジョブを実行してみましょう。ジョブ画面のビルド実行をクリック。
実行されたジョブの番号をクリックすると画面が切り替わるのでコンソール出力をクリックしてください。ここに標準出力が随時表示されます。
静的解析、コンパイル、テストの実行が完了し、成功したら大丈夫です。



ここまでで設定は終わったので、あとは試しにテストコードやプロダクトコードを変更してコミットしてみましょう。
自動的にJenkinsのジョブが実行されるはずです。

あとはJenkinsでPersona Pluginとかいれてジョブ成功、失敗のときに表示されているJenkinsおじさまの画像を差し替えて楽しんだりすればいいんじゃないかな!


これであなたがセクシーなコードを書く時間がより増えますね!
Enjoy Your Development!