2011-09-23

DotCloudにJenkins+Nexus環境を構築してBitbucketと連携してみたよ(2/3)

こんにちは!aquilegiaです。

その1の続きです。今回はDotCloudにJenkinsを構築します。
Jenkinsは少し面倒ですがお付き合いください。

3、DotCloudにJenkinsを構築
3-1、DotCloud用カスタムWARを作成
JenkinsもNexus同様にjettyユーザが書き込めるJENKINS_HOMEディレクトリが必要ですが、DotCloud環境だとJenkinsが提供する外部指定(JNDIや環境変数、システムプロパティなど)が全て利用できません。その為、あまりやりたくありませんがJenkinsのソースを直接変更してJENKINS_HOMEを指定します。

変更後のJENKINS_HOMEは/home/dotcloud/jenkinsとします。

3-1-1、GitHubからJenkinsのソースコードをDL
ローカルにgitがインストールされていない場合は事前にインストールしてください。

$ rpm -qa | grep git
$ sudo yum -y install git

次にカスタムWARを作るために編集対象のソースが含まれるcoreプロジェクトをcloneします。

$ mkdir -p jenkins/src
$ cd jenkins/src
$ git clone git://github.com/jenkinsci/jenkins.git core

最新ソースの状態になっているので安定してるリリースタグをチェックアウト(後でDLするWARファイルとバージョンを合わせておく)

$ cd core
$ git checkout jenkins-1.430

3-1-2、WebAppMain.javaを編集してJENKINS_HOMEを変更
WebAppMain.javaを開き

$ cd core/core/src/main/java/hudson/
$ cp -p WebAppMain.java WebAppMain.java.org
$ vi WebAppMain.java

getHomeDirメソッドの内容を次の2行にしてください。

        File newHome = new File("/home/dotcloud/jenkins");
        return new FileAndDescription(newHome,"/home/dotcloud/jenkins");

3-1-3、ソースをコンパイル
コンパイルはMavenを利用します。JDKも必要になるので無い場合はインストールしてください。

$ wget http://download.oracle.com/otn-pub/java/jdk/6u27-b07/jdk-6u27-linux-x64-rpm.bin
$ mv jdk-6u27-linux-x64-rpm.bin\?e\=1316438935\&h\=38edd1ecfcdb35d6dd0aa91215bb62fb jdk-6u27-linux-x64-rpm.bin
$ chmod u+x jdk-6u27-linux-x64-rpm.bin
$ sudo ./jdk-6u27-linux-x64-rpm.bin
$ java -version

次にMavenをインストールします。インストールはrootで作業します。

$ su -
# wget http://ftp.kddilabs.jp/infosystems/apache//maven/binaries/apache-maven-2.2.1-bin.tar.gz
# tar xzvf apache-maven-2.2.1-bin.tar.gz
# mv apache-maven-2.2.1-bin /opt/maven2
# rm -f apache-maven-2.2.1-bin.tar.gz
# vi /etc/profile.d/maven2.sh
export M2_HOME=/opt/maven2
export PATH=$PATH:$M2_HOME/bin
# exit
$ source /etc/profile
$ mvn -v

最後のmvnコマンドでバージョン情報が表示されればインストール成功です。

coreディレクトリの直下に移動した後、下記コマンドを実行してコンパイルします。(※数分かかります)

$ cd ~/jenkins/src/core/core
$ mvn compile

OpenJDKを使うとcom.sun.toolsが見つからないというエラーでビルドが失敗するかもしれません。その場合はOpenJDKをアンインストール後、OracleのJDKを入れて試してみてください。

3-1-4、JenkinsのWARファイルをDL
MavenでWARまで作っても構いませんが、無難にリリースされたWARファイルを利用します。

$ cd ~/jenkins/
$ wget http://mirrors.jenkins-ci.org/war/latest/jenkins.war

3-1-5、WAR内のclassesに作成したWebAppMain.classを追加
$ mkdir -p WEB-INF/classes/hudson
$ cp -p src/core/core/target/classes/hudson/WebAppMain.class ./WEB-INF/classes/hudson/
$ cp -p jenkins.war jenkins.war.org
$ zip jenkins.war WEB-INF/classes/hudson/WebAppMain.class

3-2、DotCloudにjenkinsアプリケーションを作成
下記コマンドを実行し、jenkinsアプリケーションを作成してください。

$ dotcloud create jenkins

3-4、DotCloudへデプロイ
デプロイはNexusと同様にビルドファイルを作成し、ビルドファイルとWARファイルのみのディレクトリを作成した後にpushコマンドを実行します。

$ cat > dotcloud.yml <<EOF
www:
  type: java
EOF
$ mkdir deploy
$ mv jenkins.war deploy/ROOT.war
$ mv dotcloud.yml deploy/
$ dotcloud push jenkins deploy/
upload deploy/ ssh://dotcloud@uploader.dotcloud.com:443/jenkins
rsync
Pseudo-terminal will not be allocated because stdin is not a terminal.
building file list ... done
./
ROOT.war
dotcloud.yml

sent 45.19M bytes  received 53 bytes  772.50K bytes/sec
total size is 45.37M  speedup is 1.00
Deployment for "jenkins" triggered. Will be available in a few seconds.
2011-09-19 15:39:50 [api] Deploy jenkins scheduled for revision=latest
2011-09-19 15:39:51 [api] Waiting for the build. (It may take a few minutes)
2011-09-19 15:39:51 [www.0] Deploying...
2011-09-19 15:40:12 [www.0] Service booted
2011-09-19 15:40:12 [api] All the services are ready. Beginning the build.
2011-09-19 15:40:13 [www.0] The build started
2011-09-19 15:40:16 [www.0] Fetched code revision rsync-xxxxxxxxxx.xx
2011-09-19 15:40:18 [www.0]  * Stopping Jetty servlet engine (was reachable on http://jenkins-default-www-0:8080/). jetty
2011-09-19 15:40:21 [www.0]  * Jetty servlet engine stopped. jetty
2011-09-19 15:40:21 [www.0]    ...done.
2011-09-19 15:40:21 [www.0]  * Starting Jetty servlet engine. jetty
2011-09-19 15:40:21 [www.0]  * Jetty servlet engine started, reachable on http://jenkins-default-www-0:8080/. jetty
2011-09-19 15:40:26 [www.0]    ...done.
2011-09-19 15:40:26 [www.0] The build finished successfully
2011-09-19 15:40:26 [api] Deploy finished

Deployment finished. Your application is available at the following URLs
www: http://jenkins-aquilegia.dotcloud.com/

この状態ではNexusと同じ理由でまだ正常に動きませんので、ディレクトリを作成する手順を進めてください。

3-5、DotCloudにJENKINS_HOMEを作成
下記コマンドを実行し、jenkinsディレクトリを作成してください。

$ dotcloud run jenkins.www -- mkdir jenkins \&\& ls -l

Nexusと同様にグループに書込権限を付与してください。

$ dotcloud run jenkins.www -- chmod g+w jenkins \&\& ls -l

3-6、Jenkinsを再起動
これでJenkinsを起動するまでの準備が整いました。
別コンソールでログをtailしつつ、Jenkinsを再起動します。

$ dotcloud logs jenkins.www
$ dotcloud restart jenkins.www

ログにスタックとレースが表示されず、最後に以下のログが表示されれば成功です。

INFO: JNLP slave agent listener started on TCP port 58600
Sep 19, 2011 3:48:56 PM hudson.WebAppMain$2 run
INFO: Jenkins is fully up and running

正常に起動すればブラウザでアクセスするとTOPページが表示されます。

3-7、Jenkinsの初期設定
初期状態は外部に公開されている状態なので自分だけが利用できるように設定します。

3-7-1、ログインユーザを作成
Jenkinsにユーザを作成します。
  • 左メニューから「Jenkinsの管理→システム設定」を選択し、システム設定ページを表示
  • 6番目ぐらいにある「セキュリティを有効化」チェックボックスをON
  • アクセス制御のユーザ情報から「Jenkinsのユーザデータベース」を選択
  • 保存ボタンを押下
保存した後、ページ右上にサインアップリンクが表示されるようになるので
リンクを押下してユーザを作成してください。(例ではjenkinsとします)

ユーザ名: jenkins
パスワード: (パスワードを入力)
パスワードの確認: (パスワードを入力)
フルネーム: jenkins
メールアドレス: (メールアドレスを入力)

サインアップが完了すると作成したユーザでログインした状態になります。
その後はサインアップできないようにします。

  • 左メニューから「Jenkinsの管理→システム設定」を選択し、システム設定ページを表示
  • アクセス制御のユーザ情報にある「ユーザにサインアップを許可」チェックボックスを外す
  • 保存ボタンを押下
これでページ右上からサインアップリンクが消えたはずです。


3-7-2、権限を設定
Jenkinsを利用できるユーザをログインユーザのみにします。
  • 左メニューから「Jenkinsの管理→システム設定」を選択し、システム設定ページを表示
  • アクセス制御の管理権限を行列による権限設定に変更
  • 匿名ユーザはそのままでauthenticatedという名前のユーザを追加
  • 全権限を与える(チェックを全て入れる)
  • 保存ボタンを押下
権限のチェックを終えると次のようになります。


これでログアウトするとホームページにログインフォームが表示されます。ログインしなければ何も利用できなくなっているはずです。

3-7-3、Mavenの自動インストール設定
DotCloud上にMavenをインストールするのは手間なのでJenkinsにやってもらいます。
ですがJenkinsがインストールしたMavenではMavenリポジトリに書き込めないという
おなじみの問題が発生するので後で対処します。
  • 左メニューから「Jenkinsの管理→システム設定」を選択し、システム設定ページを表示
  • ページ中央にあるMeven追加ボタンを押下
  • 名前とバージョンを指定
名前: maven_2.2.1
バージョン: 2.2.1
  • 自動インストールはONのままとしてください。
  • 保存ボタンを押下
また少し下に「利用状況とクラッシュレポートをJenkinsプロジェクトに匿名で報告」という項目がありますが好みで変更してください。

3-7-4、Jenkins Mercurial pluginをインストール
次はBitbucketからソースコードを取得するプラグインをインストールします。
  • 左メニューから「Jenkinsの管理→プラグインの管理」を選択し、プラグインページを表示
  • 利用可能タブから「Mercurial Plugin」を探し、チェックを入れる
  • ページ下部にあるインストールボタンを押下してインストール
この時「インストール後ジョブがなければ再起動する」にチェックを入れると
DotCloudコマンドで再起動しなくて済むので簡単です。



お疲れ様です。以上でJenkinsの構築が終わりました。
次回は動作確認用プロジェクトを作成して動作確認します。

0 件のコメント: