Jenkinsハンズオンの手引です。
やる事は以下のような内容を想定しています。
- Grails Webアプリのビルドと成果物としてwarファイルを保存する
- Webアプリのビルドが成功した時は、HerokuへデプロイするJobを実行する
- ビルドジョブとデプロイジョブのジョブ実行の流れをビルドパイプラインで見える化する
- デプロイジョブの前にアプリのテストを実行して、テストに失敗した時はデプロイジョブの実行しないようにする
演習で使用するJenkinsは私のPC上で動作させています。 マシンの環境は下記の通りです。
JDK7u55をインストールして、ApacheとTomcat7をajpで連携させて、Tomcat7のwebappsディレクトリの下にjenkins.warをデプロイしてました。
(インストール方法はググると各OS向けの方法が出てくるのでググってください...)
演習の内容に関係するPluginは以下の物です。
- Build Pipeline Plugin
- CloudBees Folders Plugin
- GIT client Plugin
- GIT plugin
- HTML Publisher plugin
- xUnit plugin
Jenkins(というか、Tomcat)を実行しているユーザで、以下のコマンドが実行できるようにしていました。
- grails (バージョンは2.3.7)
- heroku (heroku-toolbelt/3.6.0)
多分これで演習に使ったのと同じJenkinsが作れるはず…
「ここの部分が気になるので先にそこから試したい」という場合は、それぞれの個別のジョブを作っているので以下の手順でコピーしてください。
新規ジョブ作成をクリックジョブ名に、自分が作りたいジョブの名前を入力既存のジョブをコピーにチェック- コピー元に下記の表を参照して、自分が複製したいジョブの名前を入力する。
| ジョブ名 | やっていること |
|---|---|
| template-build | Grailsアプリのビルドと成果物としてwarファイルを保存する |
| template-test-failed | Grailsアプリのテスト(テスト実行すると失敗) |
| template-test-success | Grailsアプリのテスト(テスト実行すると成功) |
| template-deploy | GrailsアプリのHerokuへのデプロイ。アプリ名はビルドパラメータで設定しています |
リポジトリURL:https://github.com/uasano/Jenkins_Handson
| ブランチ名 | 状態 |
|---|---|
| phase1 | grailsアプリのひな形 |
| phase2 | BookのCRUD機能が追加。テストを実行すると失敗する |
| phase3 | テストが成功する状態 |
| master | phase3と同じ。README.mdが更新されている |
Gitリポジトリからソースコードを取得するには、Jenkinsジョブで下記の設定を行います。
ソースコード管理のGitにチェックRepositoriesのRepository URLにgit@github.com:uasano/Jenkins_Handson.gitを入力Branches to buildでビルド対象としたいブランチ名を指定。
- phase1の場合
*/phase1
Jenkinsのビルドでシェルを実行するには、Jenkinsジョブで下記の設定を行います。
ビルドのビルド手順の追加からシェルの実行を選択。(Windows上のサーバで動いている場合はWindowsバッチコマンドの実行)シェルスクリプトのテキストボックスに実行したいコマンドを入力
Grailsアプリケーションのwarファイルを生成するには以下のシェルコマンドを実行します。
grails war
このコマンドを実行すると、 target/<app.name>-<app.version>.war が生成されます。
app.nameとapp.versionはapplication.propertiesファイルで定義してあります。
ビルドで生成されたファイルを成果物として保存する時
- ジョブの設定で
ビルド後の処理のビルド後の処理の追加 成果物を保存を選択- 保存したいファイルの場所を指定
Grailsアプリケーションのtestファイルを生成するには以下のシェルコマンドを実行します。
grails test-app
このコマンドを実行すると、 target/test-reports ディレクトリの下にテスト結果が出力されます。
| 場所 | 出力されている形式 |
|---|---|
| test-repots直下 | JUnit xml形式 |
| test-reports/html | HTML |
| test-reports/plain | テキストファイル |
- テストの実行結果の成功・失敗の推移を記録するには
ビルド後の処理のビルド後の処理の追加からJUnitテスト結果の集計を選択- テスト結果XMLが出力されている場所を
テスト結果XMLに指定。
- テストの実行結果レポートのHTMLをJenkinsのジョブから参照するには
ビルド後の処理のビルド後の処理の追加からPublish HTML reportsを選択追加をクリック。HTML directory to archiveにindex.htmlが出力されているフォルダを指定。
herokuにアプリをデプロイする時は、gitのチェックアウト設定に下記の設定を追加してください。
Additional Behavioursの追加をクリックし、Check out to specific local branchを選択Branch nameにmasterを入力
GrailsアプリケーションをHerokuにアップロードするには、以下のシェルコマンドを実行します。
if ! git ls-remote heroku; then
heroku create [APP_NAME]
fi
git push heroku master
APP_NAMEを省略すると、herokuが自動的に他と重複しない値を設定します。 明示的に指定すると、重複していなければその名前で公開されます。 APP_NAMEは実行するシェルスクリプト上に直接記述しても良いですし、ビルドパラメータ等で渡しても良いと思います。
if で条件分岐しているのは、一度だけ実行すれば良いからです。
あるジョブが成功した時は、その後に別のジョブを実行させる設定。
ビルド後の処理のビルド後の処理の追加から他のプロジェクトのビルドを選択ビルドするプロジェクトに実行したいジョブの名前を入力Trigger only if build is stableにチェック。
あるジョブを実行する前に、別のビルドを実行させる設定。
ビルド・トリガの他プロジェクトのビルド後にビルドにチェックプロジェクト名に先行して実行させたいジョブの名前を設定
- Jenkinsのホーム画面のジョブ一覧のタブの
+をクリック ビュー名に任意の名前を設定Build Pipeline Viewを選択OKをクリックLayoutのSelect Initial Jobに一連のビルドの起点になるジョブを選択No Of Displayed Buildsは5を選択保存をクリック