JenkinsをDebian + Tomcat7にインストールする
前々から興味のあったJenkinsをDebian + Tomcat 7の環境で動作させてみます。http://jenkins-ci.org/
ちなみに、Jenkinsはビルドやテストを自動化するツールです。
この辺りが詳しいかと。
Jenkinsの生みの親が語る、継続的インテグレーションの未来
インストール
SCM-Managerをインストールして、Mercurialのリポジトリを公開する
ここを参考に、
・OpenJDK
・Tomcat7
のインストールを行います。
というか、試したのはこのSCM-Managerが動いているサーバーと相乗りです。
以下、ざっくりした手順を再掲しておきます。
openjdk-6をインストール。
# apt-get install openjdk-6-jdk
/usr/local/jakartaディレクトリを作成し、Tomcat 7.0.28をダウンロード、展開。
/usr/local/jakarta/apache-tomcat-7.0.28に/usr/local/tomcat7というリンクを貼ります。
# mkdir /usr/local/jakarta
# cd /usr/local/jakarta/
# wget http://ftp.kddilabs.jp/infosystems/apache/tomcat/tomcat-7/v7.0.28/bin/apache-tomcat-7.0.28.tar.gz
# tar zxf apache-tomcat-7.0.28.tar.gz
# ln -s /usr/local/jakarta/apache-tomcat-7.0.28 /usr/local/tomcat7
起動用のファイルを作成。
# vi /etc/init.d/tomcat7
内容は以下のとおり。
#! /bin/sh
### BEGIN INIT INFO
# Provides: tomcat7
# Required-Start: $all
# Required-Stop:
# Default-Start: 2 3 4 5
# Default-Stop: 0 1 6
# Short-Description: tomcat7 servlet server
# Description: tomcat7 servlet server
### END INIT INFO
DESC="tomcat7 servlet server"
NAME=tomcat7
DAEMON1=/usr/local/tomcat7/bin/startup.sh
DAEMON2=/usr/local/tomcat7/bin/shutdown.sh
PIDFILE=/var/run/$NAME.pid
SCRIPTNAME=/etc/init.d/$NAME
export JAVA_HOME=/usr/lib/jvm/java-6-openjdk
export TOMCAT_HOME=/usr/local/tomcat7
. /lib/lsb/init-functions
case "$1" in
start)
echo -n "Starting servlet server: $NAME"
$DAEMON1
;;
stop)
echo -n "Stopping servlet server: $NAME"
$DAEMON2
;;
*)
echo "Usage: $SCRIPTNAME {start|stop}" >&2
exit 1
;;
esac
exit 0
作成したら実行権限をつけておきます。
# chmod +x /etc/init.d/tomcat7
ここからがJenkinsのインストールです。
Jenkinsのwarアーカイブをダウンロードします。
ダウンロードURLは以下の通り。
http://mirrors.jenkins-ci.org/war/latest/jenkins.war
tomcatのwebappsディレクトリに移動し、ダウンロードを実行します。
/usr/local/tomcat7/webapps/jenkins.war
という構成になります。
# cd /usr/local/tomcat7/webapps/
# wget http://mirrors.jenkins-ci.org/war/latest/jenkins.war
ここまでできたら、tomcatを起動。
# /etc/init.d/tomcat7 start
起動すると、jenkins.warが自動的に解凍され、
/usr/local/tomcat7/webapps/jenkins
というディレクトリが出来上がると思います。
これでインストール完了です。
ブラウザで、
http://(サーバーIP):8080/jenkins/
を表示すると、jenkinsの初期画面が表示されると思います。

設定ファイルの変更
このままでも使えるのですが、2箇所ほど設定ファイルを変更します。
一旦Tomcatを停止します。
# /etc/init.d/tomcat7 stop
まず、Jenkinsがプロジェクトを保存するディレクトリを変更します。
初期値のままだと、実行ユーザーのホームディレクトリの.jenkins、
例えば/root/.jenkinsに設定ファイルが保存されることになります。
今回は、/opt/jenkins/に設定ファイルを保存することにしました。
/opt/jenkins/ディレクトリを作成。
# mkdir /opt/jenkins/
jenkinsのweb.xmlを編集します。
# vi /usr/local/tomcat7/webapps/jenkins/WEB-INF/web.xml
175行目付近に「HUDSON_HOME」というパラメーターがあるかと思います。
※jenkinsは、以前hudsonというソフト名でした。
env-entry-valueに/opt/jenkins/を指定します。
<!-- if specified, this value is used as the Hudson home directory -->
<env-entry>
<env-entry-name>HUDSON_HOME</env-entry-name>
<env-entry-type>java.lang.String</env-entry-type>
<env-entry-value>/opt/jenkins/</env-entry-value>
</env-entry>
もう一箇所、tomcatの設定ファイルを変更します。
初期値のままだと、jenkinsの管理画面を表示した時、
URLがUTF-8でデコードされていません。ジョブ名などにnon-ASCIIな文字を使用する場合は、
コンテナの設定やTomcat i18Nを参考に設定してください。

このように表示されると思います。
この警告に対応するため、Tomcatのserver.xmlを編集します。
# vi /usr/local/tomcat7/conf/server.xml
70行目付近に、8080ポートのConnector設定があるかと思います。
そこに、URIEncoding="UTF-8"の設定を追加します。
<!-- A "Connector" represents an endpoint by which requests are received
and responses are returned. Documentation at :
Java HTTP Connector: /docs/config/http.html (blocking & non-blocking)
Java AJP Connector: /docs/config/ajp.html
APR (HTTP/AJP) Connector: /docs/apr.html
Define a non-SSL HTTP/1.1 Connector on port 8080
-->
<Connector port="8080" protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="8443"
URIEncoding="UTF-8" />
これで設定完了です。
Tomcatを起動します。
# /etc/init.d/tomcat7 start
はじめてのビルド
ビルドにantを使用する場合は、別途antをインストールしておきます。
# apt-get install ant
ちなみに、antをインストールしていない状態だと、
ビルドします。 ワークスペース: /opt/jenkins/jobs/test/workspace
[workspace] $ ant -file build.xml dist
FATAL: コマンドの実行に失敗しましたどのAntを使うかプロジェクトで設定する必要があるのでは?
java.io.IOException: Cannot run program "ant" (in directory "/opt/jenkins/jobs/test/workspace"):
java.io.IOException: error=2, No such file or directory
こんなエラーが表示されます。
よく読めばすぐわかるのですが、antはjenkinsに同梱されているものだと思い込んでおり、
しばらく意味がわかりませんでした。
ビルドのテストに使用するのは、
AntでJUnit 4.10のテストを実行する
ここで作成したサンプルプログラムです。
簡単なプログラム(Main.java)と、それをテストするプログラム(MainTest.java)です。
最初にジョブの作成を行います。
左上の新規ジョブ作成をクリック。

任意のジョブ名を入力。今回は「test」としました。
フリースタイル・プロジェクトのビルドを選択して、OK。

詳細な設定画面に遷移します。
ビルドの「ビルド手順の追加」をクリックし、「Antの呼び出し」を選択します。

antの呼び出しターゲットの選択です。
今回は、build.xmlのdistを実行したいので、distと入力しました。

「build.xml」というantデフォルトの名前であればこのままで良いのですが、
別のファイル名、例えば「build_test.xml」などにしている場合は、「高度な設定」を
クリックし、ビルドファイルに「build_test.xml」と入力します。

これでtestプロジェクトが作成されました。
「ワークスペース」をクリックします。

初回表示は必ずエラーが表示されます。
「ビルドを実行」をクリックします。

ビルドするものが無いので、初回ビルドは必ず失敗します。
ビルドが終わった後、再度ワークスペースを表示してみると、エラーの表示ではなくなっています。

このtestジョブの設定は、HUDSON_HOME/jobs/testに保存されます。
今回だと/opt/jenkins/jobs/testとなります。
ビルドを実行したことにより、ここにworkspaceディレクトリが作成されます。
/opt/jenkins/jobs/test/workspace
ここに作成したソースファイルと、必要なライブラリ、build.xml一式をコピーします。
コピー後、/opt/jenkins/jobs/test/workspaceは以下のようになるはずです。

workspaceへのコピーが終わったら、Jenkinsの画面に戻りビルドを実行します。

画面左下を見ると、2回目のビルドは青丸なので成功で終了しているようです。
ワークスペースにはantで生成されたフォルダが増えています。

distフォルダと見てみると、ちゃんとjarファイルが出来上がっています。

コンソール出力を見てみると、antが出力したログが閲覧できます。

JUnitのテストが失敗した場合の表示
Main.javaの一部を修正し、テストが失敗するように変更します。
- //引数2つを加えるだけ
- public static int add(int a, int b) {
- //return a + b;
- //JUnitのテストでエラーになるよう、掛け算に変更
- return a * b;
- }
ビルドを実行してみると、赤丸表示なので失敗のようです。

コンソール出力を見てみると、BUILD FAILED
狙い通りの動きです。

これ、やってみると楽しいです。
本来は手動でファイルをおいて・・・なんてやらず、
ソースのリポジトリを監視すると思います。
次は、Mercurialのリポジトリを監視し、変更があったら
自動的にビルドしてくれる環境が作れるか試してみます。
【参考URL】
Jenkins
http://jenkins-ci.org/
Building a software project
https://wiki.jenkins-ci.org/display/JA/Building+a+software+project
JENKINS_HOMEディレクトリ
https://wiki.jenkins-ci.org/display/JA/Administering+Jenkins
- 関連記事
-
- JavaCCを使用した構文解析プログラムの開発環境を整える
- JenkinsとMercurialを連携する(SCM-Manager使用)
- JenkinsをDebian + Tomcat7にインストールする
- AntでJUnit 4.10のテストを実行する
- JUnit 4.10で使用できるアノテーション(org.junitパッケージ)
コメント