※もくじはこちら

概要

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

登場人物

  • Play Framework 2.2
  • Jenkins(Jenkins.war)
  • Git
  • CentOS 6.4 i386

手順その⑤:Jenkinsの設定・開発系

Jenkinsを起動しておきましょう。

1
2
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
  • ビルド
    • シェルの実行
1
2
3
4
5
6
7
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
  • ビルド
    • シェルの実行
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
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
  • ビルド
    • シェルの実行
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
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』スクリプトを作成する。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
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

1
2
gituser$ chmod +x post-update

確認

Gitリポジトリに origin/master と origin/develop を作成してジョブの起動確認を行う。
 
これで、Gitリモートリポジトリにpushするたびにビルド→デプロイが行われるようになった。
 
本番環境へのデプロイ方法はまだちょっと考え中。