※もくじはこちら

### 概要 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
  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
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
<div class="section">
    #### Jenkinsの設定
    Jenkinsの設定方法はいろんな人が書いているので、ここでは要点だけ。

<ul>
<li>「Jenkinsの管理」→「グローバルセキュリティの設定」→「セキュリティを有効化」
<ul>
<li>お好みの設定で。</li>
</ul></li>
<li>「Jenkinsの管理」→「プラグインの管理」→「利用可能」
<ul>
<li>Git Plugin をインストール</li>
</ul></li>
</ul>
</div>
<div class="section">
    #### ジョブの作成
    
<div class="section">
    ##### ①ビルドジョブ(develop用)を作成
    
<ul>
<li>ジョブ名
<ul>
<li>playapp-develop-build</li>
</ul></li>
<li>フリースタイル・プロジェクトのビルド</li>
</ul>
<ul>
<li>ソースコード管理
<ul>
<li>Git
<ul>
<li>Repository URL
<ul>
<li>ssh://gituser@localhost/home/gituser/playapp.git</li>
</ul></li>
<li>Branches to build
<ul>
<li>*/develop</li>
</ul></li>
</ul></li>
</ul></li>
</ul>
<ul>
<li>ビルド・トリガ
<ul>
<li>リモートからビルド
<ul>
<li>認証トークン
<ul>
<li>build</li>
</ul></li>
</ul></li>
</ul></li>
</ul>
<ul>
<li>ビルド
<ul>
<li>シェルの実行</li>
</ul></li>
</ul>```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を通すために使用

<ul>
<li>ビルド後の処理
<ul>
<li>JUnitテスト結果の集計
<ul>
<li>テスト結果XML
<ul>
<li>target/test-reports/*.xml</li>
</ul></li>
</ul></li>
<li>Javadocの保存</li>
<li>Javadocディレクトリ
<ul>
<li>target/javadoc</li>
</ul></li>
</ul></li>
</ul>
</div>
<div class="section">
    ##### ②ビルドジョブ(master用)を作成
    
<ul>
<li>ジョブ名
<ul>
<li>playapp-master-build</li>
</ul></li>
<li>既存ジョブのコピー
<ul>
<li>コピー元
<ul>
<li>playapp-develop-build</li>
</ul></li>
</ul></li>
</ul>※変更点は、ビルド時のブランチ名のみ

<ul>
<li>ソースコード管理
<ul>
<li>Git
<ul>
<li>Branches to build
<ul>
<li>*/master</li>
</ul></li>
</ul></li>
</ul></li>
</ul>
</div>
<div class="section">
    ##### ③デプロイジョブ(develop用)を作成
    
<ul>
<li>ジョブ名
<ul>
<li>playapp-develop-deploy</li>
</ul></li>
<li>フリースタイル・プロジェクトのビルド</li>
</ul>
<ul>
<li>ソースコード管理
<ul>
<li>なし</li>
</ul></li>
<li>ビルド・トリガ
<ul>
<li>他プロジェクトのビルド後にビルド
<ul>
<li>playapp-develop-build</li>
</ul></li>
</ul></li>
<li>ビルド
<ul>
<li>シェルの実行</li>
</ul></li>
</ul>```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

 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
35
36
37
38
39
40
41
42
43
</div>
</div>
<div class="section">
    #### 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&#39;/&#39; &#39;{print $3}&#39;`

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するたびにビルド→デプロイが行われるようになった。
 
本番環境へのデプロイ方法はまだちょっと考え中。