読者です 読者をやめる 読者になる 読者になる

garbagetown

個人の日記です

Hudson

ci

部内プレゼン向けにプロキシ環境下のパソコン内に VirtualBox を使って仮想ビルドサーバを構築したので手順をメモっておきます。

前提条件

IP アドレスに 192.168.56.101 を指定した仮想マシンに下記ソフトウェアをインストールして、maven プロジェクトを svn でバージョン管理、hudson でビルドします。

apache

何はともあれ apache を入れます。

$ sudo apt-get install apache2

http://192.168.56.101/ にアクセスして「It works!」と表示されることを確認します。


svn

subversion をインストールして web_dav 経由でアクセスできるよう設定します。

$ sudo apt-get install subversion subversion-tools libapache2-svn

管理対象プロジェクト名を「test」として、url やら path やらを設定します。

$ sudo vi /etc/apache2/mods-enabled/dav_svn.conf

<Location /svn/test>
  DAV svn
  SVNPath /home/svn/repos/test
  AuthType Basic
  AuthName "Subversion Repository"
  AuthUserFile /etc/apache2/dav_svn.passwd
  Require valid-user
</Location>

dav_svn.conf で指定したパスにリポジトリを作成し、web_dav 経由でアクセスできるよう www-data ユーザに所有権を与えます。

$ sudo mkdir -p /home/svn/repos
$ sudo svnadmin create /home/svn/repos/test
$ sudo chown -R www-data /home/svn/repos/test

dav_svn.conf で指定した認証用ファイルにアカウントを追加します。

$ sudo htpasswd -c dav_svn.passwd xxx
New password: 
Re-type new password: 
Adding password for user xxx

apache を再起動して http://192.168.56.101/svn/test にアクセスし、「Revision 0:」と表示されることを確認します。

$ sudo /etc/init.d/apache2 restart



java

java をインストールします。他に特に書くことがないので申し訳程度にバージョン確認手順も載せていますが、別に実行する必要はありません。

$ sudo apt-get install sun-java6-jdk sun-java6-source

$ java -version
java version "1.6.0_15"
Java(TM) SE Runtime Environment (build 1.6.0_15-b03)
Java HotSpot(TM) Client VM (build 14.1-b02, mixed mode, sharing)


tomcat

hudson は winstone というサーブレットコンテナを内蔵しており、別途コンテナを用意する必要はありませんが、開発したアプリを載せたり何だかんだと使う機会も多いので、tomcat をインストールします。

$ sudo apt-get install tomcat6 tomcat6-admin tomcat6-user tomcat6-common

http://192.168.56.101:8080/ にアクセスして「It works!」と表示されることを確認したら、続いて tomcat-users.xml に admin 権限のユーザを追加します*1

$ sudo cp -p /etc/tomcat6/tomcat-users.xml /etc/tomcat6/tomcat-users.xml.org
$ sudo vi /etc/tomcat6/tomcat-users.xml

<tomcat-users>
  <role rolename="tomcat"/>
  <role rolename="manager"/>
  <role rolename="admin"/>
  <user username="tomcat" password="tomcat" roles="tomcat"/>
  <user username="admin" password="xxx" roles="admin,manager"/>
</tomcat-users>

tomcat を再起動したら http://192.168.56.101:8080/manager/html にアクセスし、設定した admin ユーザで 管理コンソールにログインできることを確認します。

$ sudo /etc/init.d/tomcat6 restart
 * Stopping Tomcat servlet engine tomcat6                              [ OK ]
 * Starting Tomcat servlet engine tomcat6                              [ OK ]



maven

maven プロジェクトをビルドするので maven をインストールします。hudson には maven の自動インストール機能がありますが、プロキシやリポジトリの設定等を予め行っておきたいので、ここでは別途インストールします。

$ sudo apt-get install maven2

$ mvn -version
Apache Maven 2.2.1 (rdebian-1)
Java version: 1.6.0_15
Java home: /usr/lib/jvm/java-6-sun-1.6.0.15/jre
Default locale: ja_JP, platform encoding: UTF-8
OS name: "linux" version: "2.6.31-14-generic-pae" arch: "i386" Family: "unix"

バージョンあたりを表示してインストールが完了したことを確認したら、設定ファイルにプロキシとローカルリポジトリの設定を追加します。

$ sudo cp -p /etc/maven2/setting.xml /etc/maven2/settings.xml.org
$ sudo vi /etc/maven2/settings.xml

<localRepository>/etc/maven2/repository</localRepository>
<proxy>
  <active>true</active>
  <protocol>http</protocol>
  <host>your.proxy.host</host>
  <port>8080</port>
  <!--
  <nonProxyHosts>local.net|some.host.com</nonProxyHosts>
  -->
</proxy>

tomcat6 ユーザが実行する hudson からリポジトリに書き込めるよう所有権を設定します。

$ sudo chown tomcat6:nogroup /etc/maven2/repository


hudson

いよいよ hudson をインストールします。tomcat のアプリケーションデプロイ用パスに移動して war ファイルを wget します。

$ cd /var/lib/tomcat6/webapps/
$ sudo wget http://hudson-ci.org/latest/hudson.war

hudson の作業用ディレクトリを作成し、tomcat6 ユーザに所有権を与えます。

$ sodo mkdir /home/hudson
$ sudo chown tomcat6:nogroup /home/hudson

環境変数 JAVA_OPTS に HUDSON_HOME として上記作業用パスを渡します。また、サーブレットで動的に画像を生成する場合、java.awt.headless に true を設定する必要があるらしいので、これも併せて渡します。
さらに、ubuntu の apt-get で tomcat をインストールした場合、セキュリティマネージャが有効になっているので、これを無効に設定します。

$ sudo vi /etc/default/tomcat6 
JAVA_OPTS="-DHUDSON_HOME=/home/hudson -Djava.awt.headless=true"
TOMCAT6_SECURITY=no

最後に tomcat 用の設定ファイルに hudson のジョブ名等に日本語を使用できるようにするため URIEncoding 属性を追加します。

$ sudo cp -p /etc/tomcat6/server.xml /etc/tomcat6/server.xml.org
$ sudo vi /etc/tomcat6/server.xml

<!-- Define an AJP 1.3 Connector on port 8009 -->
<Connector port="8009" protocol="AJP/1.3" redirectPort="8443" URIEncoding="UTF-8" />

設定が完了したら tomcat を再起動し、http://192.168.56.101:8080/hudson/ にアクセスして hudson の画面が表示されることを確認します。

$ sudo /etc/init.d/tomcat6 restart



apachetomcat

これまでの人生でもう 5,000 回くらい「:8080」と叩き続けてきていい加減いやになったので apachetomcat を連携します。
まずは mod_proxy 用の設定ファイルに設定を追加します。ここでは物理 LAN からのみのアクセスを想定して Allow from には 192.168.56.0/24 を指定しています。

$ sudo cp -p /etc/apache2/mods-available/proxy.conf /etc/apache2/mods-available/proxy.conf.org
$ sudo vi /etc/apache2/mods-available/proxy.conf

<IfModule mod_proxy.c>
        #turning ProxyRequests on and allowing proxying from all may allow
        #spammers to use your proxy to send email.

        ProxyRequests Off

        <Proxy *>
                AddDefaultCharset off
                Order deny,allow
                Deny from all
                Allow from 192.168.56.0/24
        </Proxy>

        # Enable/disable the handling of HTTP/1.1 "Via:" headers.
        # ("Full" adds the server version; "Block" removes all outgoing Via: headers)
        # Set to one of: Off | On | Full | Block

        ProxyVia On
</IfModule>

続いて mod_proxy_ajp 用の設定ファイルに設定を追加します。

$ sudo vi /etc/apache2/mods-available/proxy_ajp.conf

<IfModule mod_proxy_ajp.c>
    <Location /hudson>
        ProxyPass ajp://localhost:8009/hudson
    </Location>
</IfModule>

設定が完了したら a2enmod でモジュールを有効化します。既に有効だと言われているような気もしますが、ここで a2enmod を叩かないと設定が効きませんでした。

$ sudo a2enmod proxy_ajp
Considering dependency proxy for proxy_ajp:
Module proxy already enabled
Enabling module proxy_ajp.
Run '/etc/init.d/apache2 restart' to activate new configuration!

$ sudo a2enmod proxy_ajp
Considering dependency proxy for proxy_ajp:
Module proxy already enabled
Enabling module proxy_ajp.
Run '/etc/init.d/apache2 restart' to activate new configuration!

tomcatapache をこの順に再起動します。

$ sudo /etc/init.d/tomcat6 restart
 * Stopping Tomcat servlet engine tomcat6                              [ OK ]
 * Starting Tomcat servlet engine tomcat6                              [ OK ]
$ sudo /etc/init.d/apache2 restart
 * Restarting web server apache2                                                                                        apache2: Could not reliably determine the server's fully qualified domain name, using 127.0.1.1 for ServerName
 ... waiting apache2: Could not reliably determine the server's fully qualified domain name, using 127.0.1.1 for ServerName

なんかループバックアドレスはどうのと文句を言われているような気もしますが、華麗にスルーして http://192.168.56.101/hudson/ にアクセスして hudson の画面が表示されることを確認します。

*1:hudson が tomcat ユーザを使用したような気がするので追加してありますがうろ覚えです