今回はGradleをJenkinsで使う場合の話です。
Jenkinsを使って前回作成したプロジェクト(gradle-sample-webapp)のビルドを行います。
Jenkinsにプラグインをインストール
Jenkinsの動いているところまでは終わっているものとして、Jenkinsに必要なプラグインをインストールしていきます。普段の開発でJenkinsを立てる場合(良い事ではないですが)無計画に必要なものを入れてごった煮にしてしまってるのですが、今回もそこは改善していません…。
赤字で書いているのが今回の実施に必須なもの、それ以外は静的解析のために今後使いそうなもの、普段のプロジェクトでよくインストールしているものになります。GradleとGitのプラグインだけが必須ということになりますね。
- Static Analysis Utilities
- Task Scanner Plug-in
- Checkstyle Plug-in
- FindBugs Plug-in
- Static Analysis Collector Plug-in
- Jenkins Cobertura Plugin
- Jenkins GIT client plugin(Jenkins GIT pluginをインストールすると一緒に入る?)
- Jenkins Parameterized Trigger plugin
- Jenkins Multiple SCMs plugin
- Jenkins GIT plugin
- Jenkins Gradle plugin
- Jenkins Job Configuration History Plugin
- Jenkins Workspace Cleanup Plugin
- Environment Injector Plugin
- emotional-jenkins-plugin
Jenkinsでのシステムの設定(Gradle)
今回からGradle1.4を使おうと思います。
そこで、最近リリースされたGradle1.4を自動インストールさせてビルドをしようとしたのですが、ビルド時に以下のエラーになりました(JenkinsはWindowsマシンで走らせています)
java.io.IOException: Failed to rename C:\Program Files\Jenkins\tools\hudson.plugins.gradle.GradleInstallation\gradle-1.4\gradle-1.4\lib to C:\Program Files\Jenkins\tools\hudson.plugins.gradle.GradleInstallation\gradle-1.4\lib at hudson.FilePath$32.invoke(FilePath.java:1666) (以下、略)
そのため、手動でGradleをインストールし、そのパスを設定しました。
ジョブの作成
今回は、ひとつのジョブの中で、チェックアウト、JUnit、war作成、Javadocの生成までを行います。ジョブ名は「sample-webapp-build」としました。
ビルド手順
Jenkins Gradleプラグインで拡張されている「Invoke Gradle script」を選択して、必要なタスクを順番に定義していきます。test, javadoc, warのいずれも自分で定義したタスクではなくGradleのプラグインで提供されているタスクです。
構成はGradleの標準的な構成なので、ほとんどの項目は空白(デフォルト)で大丈夫です。
ちなみにこのジョブでは、ビルド環境として「Jenkins Workspace Cleanup Plugin」を利用してビルド前にワークスペースをまっさらな状態にしています。毎回チェックアウトからのフルビルドで時間がかかるのを避けるなら、cleanタスクを最初に実行するようにしてもいいかもしれません。
ビルド結果の確認
必要な設定が終わったのでビルドを実行します。
実行が終わった後にジョブを開くとこんな感じ。
Javadocへのリンク、JUnitのテスト結果(1個しかないですが)、ビルドの成果物としてwarファイルが作成されていることが確認できます。Jenkinsのジョブとしては、必要最低限のわずかな設定だけで、基本的なビルドが行えることが分かりました。
ちなみに、最初の方のビルド(#1〜#5)が失敗しているのは、設定ミスです…。
おまけ:Gradle Wrapperの話
JenkinsでGradleを扱う場合、bluepapa32さんの記事で紹介されているGradle Wrapperを使うのが良さそう。
Gradle Wrapperについてもそのうち、調べてみたいなと思います。