※もくじはこちら

### 概要 CentOS上に、Play Framework2 on JavaのCI環境を構築していきます。
長くなるので分割で。

#### 登場人物
  • Play Framework 2.2
  • Jenkins(Jenkins.war)
  • Git
  • CentOS 6.4 i386
### 手順その⑤:Jenkinsの設定・開発系 Jenkinsを起動しておきましょう。 ```sh ciuser$ ./start-jenkins.sh ```
#### Jenkinsの設定 Jenkinsの設定方法はいろんな人が書いているので、ここでは要点だけ。
  • 「Jenkinsの管理」→「グローバルセキュリティの設定」→「セキュリティを有効化」
    • お好みの設定で。
  • 「Jenkinsの管理」→「プラグインの管理」→「利用可能」
    • Git Plugin をインストール
#### ジョブの作成
##### ①ビルドジョブ(develop用)を作成
  • ジョブ名
    • playapp-develop-build
  • フリースタイル・プロジェクトのビルド
  • ソースコード管理
    • Git
      • Repository URL
        • ssh://gituser@localhost/home/gituser/playapp.git
      • Branches to build
        • */develop
  • ビルド・トリガ
    • リモートからビルド
      • 認証トークン
        • build
  • ビルド
    • シェルの実行
```sh play clean play test play compile play stage play dist javadoc -classpath "target/universal/stage/lib/*" -d "target/javadoc" -sourcepath app controllers models ```※stageは、javadoc作成時にclasspathを通すために使用
  • ビルド後の処理
    • JUnitテスト結果の集計
      • テスト結果XML
        • target/test-reports/*.xml
    • Javadocの保存
    • Javadocディレクトリ
      • target/javadoc
##### ②ビルドジョブ(master用)を作成
  • ジョブ名
    • playapp-master-build
  • 既存ジョブのコピー
    • コピー元
      • playapp-develop-build
※変更点は、ビルド時のブランチ名のみ
  • ソースコード管理
    • Git
      • Branches to build
        • */master
##### ③デプロイジョブ(develop用)を作成
  • ジョブ名
    • playapp-develop-deploy
  • フリースタイル・プロジェクトのビルド
  • ソースコード管理
    • なし
  • ビルド・トリガ
    • 他プロジェクトのビルド後にビルド
      • playapp-develop-build
  • ビルド
    • シェルの実行
```sh DIST=playapp.develop@localhost PACKAGE=playapp-1.0-SNAPSHOT PACKAGEZIP=${PACKAGE}.zip cd ../playapp-develop-build cd target/universal/ scp ${PACKAGEZIP} ${DIST}: ssh ${DIST} unzip -o ${PACKAGEZIP} ssh ${DIST} bash -v stop-play.sh ssh ${DIST} rm -fR deploy ssh ${DIST} mv ${PACKAGE} deploy ssh ${DIST} bash -v start-play.sh ```
##### ④デプロイジョブ(master用)を作成
  • ジョブ名
    • playapp-master-deploy
  • 既存ジョブのコピー
    • コピー元
      • playapp-develop-deploy
※変更点は、ビルド・トリガとビルドシェル
  • ビルド・トリガ
    • 他プロジェクトのビルド後にビルド
      • playapp-master-build
  • ビルド
    • シェルの実行
```sh DIST=playapp.master@localhost PACKAGE=playapp-1.0-SNAPSHOT PACKAGEZIP=${PACKAGE}.zip cd ../playapp-master-build cd target/universal/ scp ${PACKAGEZIP} ${DIST}: ssh ${DIST} unzip -o ${PACKAGEZIP} ssh ${DIST} bash -v stop-play.sh ssh ${DIST} rm -fR deploy ssh ${DIST} mv ${PACKAGE} deploy ssh ${DIST} bash -v start-play.sh ```
#### Gitサーバに、Jenkinsジョブ起動のためのhookスクリプトを作成 master・developそれぞれのブランチへのpushでそれぞれ別のジョブを起動するので、『post-update』スクリプトを作成する。 ```sh gituser$ cd ~/playapp/hooks/ gituser$ vim post-update #!/bin/sh # # An example hook script to prepare a packed repository for use over # dumb transports. # # To enable this hook, rename this file to "post-update". echo "Hook post-update start" BRANCH=`echo $1 | awk -F'/' '{print $3}'` echo ARG1=$1 echo ARG2=$2 echo ARG3=$3 echo BRANCH=$BRANCH BASIC_USER=hogehoge BASIC_PASSWD=fugafuga TOKEN=build JOB_URL=http://localhost:50080/job/playapp-$BRANCH-build/build?token=$TOKEN case "$BRANCH" in "develop" | "master") wget -O /dev/null --auth-no-challenge --http-user=$BASIC_USER --http-password=$BASIC_PASSWD $JOB_URL || echo "wget failed" ;; esac echo "Hook post-update end" exec git update-server-info ``````sh gituser$ chmod +x post-update ```
##### 確認 Gitリポジトリに origin/master と origin/develop を作成してジョブの起動確認を行う。
 
これで、Gitリモートリポジトリにpushするたびにビルド→デプロイが行われるようになった。
 
本番環境へのデプロイ方法はまだちょっと考え中。