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の初期画面が表示されると思います。

101_01.png







設定ファイルの変更



このままでも使えるのですが、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を参考に設定してください。



101_02.png

このように表示されると思います。

この警告に対応するため、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)です。



最初にジョブの作成を行います。
左上の新規ジョブ作成をクリック。
101_03.png


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


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


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


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



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


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


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


このtestジョブの設定は、HUDSON_HOME/jobs/testに保存されます。
今回だと/opt/jenkins/jobs/testとなります。
ビルドを実行したことにより、ここにworkspaceディレクトリが作成されます。

/opt/jenkins/jobs/test/workspace
ここに作成したソースファイルと、必要なライブラリ、build.xml一式をコピーします。

コピー後、/opt/jenkins/jobs/test/workspaceは以下のようになるはずです。
101_11.png


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


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


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


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





JUnitのテストが失敗した場合の表示



Main.javaの一部を修正し、テストが失敗するように変更します。

  1. //引数2つを加えるだけ
  2. public static int add(int a, int b) {
  3.     //return a + b;
  4.     //JUnitのテストでエラーになるよう、掛け算に変更
  5.     return a * b;
  6. }




ビルドを実行してみると、赤丸表示なので失敗のようです。
101_16.png


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



これ、やってみると楽しいです。

本来は手動でファイルをおいて・・・なんてやらず、
ソースのリポジトリを監視すると思います。

次は、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


関連記事

コメント

非公開コメント

プロフィール

Author:symfo
blog形式だと探しにくいので、まとめサイト作成中です。
Symfoware まとめ

PR




検索フォーム

月別アーカイブ