くんすとの備忘録

IT系技術メモ

移転しました。

15秒後に自動的にリダイレクトします。

Play Framework2 on JavaをJenkins.warとGitでCIする その⑤(Jenkins設定編・開発系)

※もくじはこちら

概要

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

登場人物

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

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

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

ciuser$ ./start-jenkins.sh

Jenkinsの設定

Jenkinsの設定方法はいろんな人が書いているので、ここでは要点だけ。

  • 「Jenkinsの管理」→「グローバルセキュリティの設定」→「セキュリティを有効化」
    • お好みの設定で。
  • 「Jenkinsの管理」→「プラグインの管理」→「利用可能」
    • Git Plugin をインストール

ジョブの作成

①ビルドジョブ(develop用)を作成
  • ジョブ名
    • playapp-develop-build
  • フリースタイル・プロジェクトのビルド
  • ビルド・トリガ
    • リモートからビルド
      • 認証トークン
        • build
  • ビルド
    • シェルの実行
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を通すために使用

②ビルドジョブ(master用)を作成
  • ジョブ名
    • playapp-master-build
  • 既存ジョブのコピー
    • コピー元
      • playapp-develop-build

※変更点は、ビルド時のブランチ名のみ

③デプロイジョブ(develop用)を作成
  • ジョブ名
    • playapp-develop-deploy
  • フリースタイル・プロジェクトのビルド
  • ソースコード管理
    • なし
  • ビルド・トリガ
    • 他プロジェクトのビルド後にビルド
      • playapp-develop-build
  • ビルド
    • シェルの実行
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
  • ビルド
    • シェルの実行
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』スクリプトを作成する。

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
gituser$ chmod +x post-update
確認

Gitリポジトリに origin/master と origin/develop を作成してジョブの起動確認を行う。
 
これで、Gitリモートリポジトリにpushするたびにビルド→デプロイが行われるようになった。


 
本番環境へのデプロイ方法はまだちょっと考え中。