2012年11月18日日曜日

Jenkins + Jboss でJ2EEホットデプロイなCI環境構築

CIが流行っていますね。
僕も簡単にですが環境を構築してみました。
その時のメモを載せておきます。

内容は、
  • Jenkinsをインストールする
  • J2EEアプリケーションを載せるJbossのインストールと環境設定をする
です。
その後の作業として挙がるJenkinsの具体的な設定については、
プロジェクトの内容やビルドツールの種類等にもよりますのでここでは割愛させていただきます。


そもそものJenkins+Jbossの目的として、ここでは以下2点を掲げさせて頂きます:
  • プロジェクトの継続的な監視・改善のため
  • 開発者以外のメンバーが利用できるJ2EE提供するため
環境構築
では早速構築していきましょう。
テスト用のホストマシンに仮想マシンをのせ、
そこにJenkinsを構築しているという環境とします。

Jenkinsによって自動ビルドし、
生成されたwarファイルをJBossにホットデプロイするというのが一連の流れです。
TEST環境インテグレーションツールの運用をVMで行います。


JenkinsやJbossによって新しく設定が発生するが、それらはまとめて次項で述べます。
OS : Ubuntu Server 12.04.1 LTS 64bit (Virtual Machine)
ソフトウェア :


  • DK 7 (Oracle製 JDK)
  • Nginx (HTTPサーバ)
  • Jenkins 1.4 (CIツール)
  • JBoss 6 (APサーバ)



OSインストール

OSは Ubuntu Server 12.04.1 LTS 64bit でVMと同じです。

VMware Player インストール

latestで問題ないと思います。

Ubuntu Server 12.04.1 LTS 64bit の仮想マシン設定

ディスク:20GB
CPU:2コア
RAM:2GB
ネットワーク:ブリッジ接続
以上の構成でインストール。ここから先の設定はすべて仮想マシン上で行うものとします。

ソフトウェアのアップデート

sudo aptitude update
sudo aptitude safe-upgrade

ネットワークの設定・再起動

固定IP or DHCPによる設定を行います。
今回は固定IP+ネームサーバ登録だったため以下のようにしました。
sudo vim /etc/network/interfaces
-------------
auto eth0
iface eth0 inet static
address *****
netmask *****
gateway *****
dns-nameservers *****
-------------

CI(継続的インテグレーションツール)
以下では、CIを行うためのソフトウェアインストール・それに付随する設定手順を示します。


JDK7 のインストール

javaは/usr/lib/jvm/にインストールし、latestのシンボリックリンクを作成。
y-wada@localhost:/usr/lib/jvm$ ls -la
-----------------
drwxr-xr-x  8 root root  4096 10月 12 16:06 java-7-oracle
lrwxrwxrwx  1 root root    14 10月 12 16:18 latest -> java-7-oracle/
-----------------

maven2のインストール

JenkinsはAntやMavenといったビルドツールと組み合わせることで
より大きなチカラを発揮していくれます。
mavenの場合は/usr/share/にインストールし、maven2へリネームします。

Jenkins(+Nginx)のインストール

本家にUbunuへのインストール手順があったので基本的にはそれに従いました。
https://wiki.jenkins-ci.org/display/JENKINS/Installing+Jenkins+on+Ubuntu

HTTPサーバはNginxを選択。
プロキシ設定は以下のようにしています。
y-wada$ vim /etc/nginx/sites-available/jenkins
------------------------
upstream app_server {
    server 127.0.0.1:8081 fail_timeout=0;
}

server {
    listen 80;
    listen [::]:80 default ipv6only=on;
    server_name server-name;

    location / {
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header Host $http_host;
        proxy_redirect off;

        if (!-f $request_filename) {
            proxy_pass http://app_server;
            break;
        }
    }
}
------------------------

JBoss6のインストール

http://www.caseyfulton.com/installing-jboss-as-6-0-final-on-ubuntu-server-11-04-for-mere-mortals/
ここを参考にインストールを行いました。

JBoss6 HTTPポートの書き換え

HTTPサーバのポートを8080 -> 8085とします。
y-wada~$ vim /usr/local/jboss/server/default/conf/bindingservice.beans/META-INF/bindings-jboss-beans.xml
--------------------------
            <bean class="org.jboss.services.binding.ServiceBindingMetadata">
               <property name="serviceName">jboss.web:service=WebServer</property>
               <property name="bindingName">HttpConnector</property>
               <property name="port">8085</property>
               <property name="description">JBoss Web HTTP connector socket; also drives the values for the HTTPS and AJP sockets</property>
            </bean>
---------------------------

JBOSSにデプロイするアプリケーションの設定

デプロイしたアプリケーションを実行する際の設定をここで行います。
変更点は、

  • PermSizeを増やす(OutOfMemory対策)
  • Javaのオプション設定(アプリケーションをテストモードで実行させるため)

y-wada:~$ vim /usr/local/jboss/bin/run.conf
-------------------
if [ "x$JAVA_OPTS" = "x" ]; then
   JAVA_OPTS="-Xms128m -Xmx1024m -XX:MaxPermSize=1024m -Dorg.jboss.resolver.warning=true -Dsun.rmi.dgc.client.gcInterval=3600000 -Dsun.rmi.dgc.server.gcInterval=3600000" (書き換え)
fi
JAVA_OPTS="${JAVA_OPTS} -Djboss.bind.address=0.0.0.0 -Denvironment.level=test" (ファイルの末尾に追加)
--------------------

ホットデプロイ用ディレクトリのパーミッション変更

Jenkinsは /usr/local/jboss/server/default/deploy 
にwarファイルを書き込むことによってデプロイします。
ただし元がdrwxr-xr-xのため、
+w して jenkinsユーザがwarを置けるようにしておきます。

JBoss設定用アプリケーションのリネーム

${JBOSS_HOME}/server/default/deploy/ROOT.war
がいるとデプロイに失敗するので、適当にROOT.war.bakなどとリネームしておく 。


以上です。最低限の設定で、
ここからプロジェクトごとにさらにJenkinsの設定が必要となりますが、
CIのための土台はできました。


0 件のコメント:

コメントを投稿