サーバ

Jira 4 へのアップグレード手順(バージョン 3.13.1 から)

Jira はAtlassian社のJava ベースのバグトラッキングシステムで、ApacheJBossでも使われています。
とっつきやすさと高機能をうまく両立しており、また見た目が洗練されている素晴らしい製品です。
オープンソースプロジェクトへは無償ライセンスを提供してくれるので私のプロジェクトでも使っています

今回はアップグレードですが、新規インストールの手順もほとんど同じです。

Jira のバージョンは 3.13.1 から 4.0 になりました。

1. 現行 Jira のバックアップ、新規インスタンスでインポート
既存 Jira インスタンスより、
ADMINISTRATION > Import & Export > Backup Data to XML
File name: /Users/yusukey/jirabackup101009.xml > "Backup"

無事成功すると Data exported to: /users/yusukey/jirabackup101009.xml と表示される。
現行インススタンスはアンデプロイ。

2. Atlassian より最新版をダウンロード
http://www.atlassian.com/software/jira/JIRADownloadCenter.jspa
デフォルトではスタンドアロン版のみ表示されています。私は自前の JBoss にデプロイしているので "Show all" をクリックして Enterprise – WAR/EAR 版を表示、ダウンロードしました。

3. MySQL にデータベース作成
既存データベースに接続させることもできるけれども、最適なスキーマを作るには新規にデータベースを用意した方が良いとのことです。

$ ./mysql
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 14605
Server version: 5.0.45 MySQL Community Server (GPL)

Type 'help;' or '\h' for help. Type '\c' to clear the buffer.

mysql> create database jira400 character set utf8;
Query OK, 1 row affected (0.07 sec)

mysql> ^DBye

$JBOSS_HOME/server/$MYCONFIG/deploy 以下に以下のファイルを作成してコネクションプール/データソースを作成。
jira400-ds.xml

<?xml version="1.0" encoding="UTF-8"?>
<datasources>
<local-tx-datasource>
<jndi-name>Jira400DS</jndi-name>
<connection-url>jdbc:mysql://localhost:3306/jira400</connection-url>
<driver-class>com.mysql.jdbc.Driver</driver-class>
<connection-property name="useUnicode">true</connection-property>
<connection-property name="characterEncoding">UTF8</connection-property>
<user-name>yusukey</user-name>
<min-pool-size>10</min-pool-size>
<max-pool-size>10</max-pool-size>
<prepared-statement-cache-size>100</prepared-statement-cache-size>
</local-tx-datasource>
</datasources>

4. Jira のデータソース設定
atlassian-jira-enterprise-4.0/edit-webapp/WEB-INF/classes/entityengine.xml を修正
接続 DB を hsql から mysql に、schema-name を削除。

99:    <datasource name="defaultDS" field-type-name="hsql"
100: schema-name="PUBLIC"

99: <datasource name="defaultDS" field-type-name="mysql"
100: <!--削除-->

atlassian-jira-enterprise-4.0/edit-webapp/WEB-INF/jboss-web.xml を作成。

<jboss-web>
<context-root>/jira</context-root>
<virtual-host>yusuke.homeip.net</virtual-host>
<resource-ref>
<res-ref-name>jdbc/JiraDS</res-ref-name>
<jndi-name>java:/Jira400DS</jndi-name>
</resource-ref>
<resource-ref>
<res-ref-name>mail/MailSession</res-ref-name>
<res-type>javax.mail.Session</res-type>
<jndi-name>java:/Mail</jndi-name>
</resource-ref>
</jboss-web>

これでローカルJNDI に jdbc:/Jira400DS としてバインドされているデータソースをアプリケーションローカルの JNDI ツリーにリンクします。

atlassian-jira-enterprise-4.0/webapp/WEB-INF/web.xml を編集
以下をアンコメントてデータソースのリンクを有効にします。

    <!-- resource references -->
<!-- Uncomment for WebSphere
<resource-ref>
<description>Database for JIRA</description>
<res-ref-name>jdbc/JiraDS</res-ref-name>
<res-type>javax.sql.DataSource</res-type>
<res-auth>SERVLET</res-auth>
<res-sharing-scope>Unshareable</res-sharing-scope>
</resource-ref>
Uncomment for WebSphere -->

5. メールセッションの設定
atlassian-jira-enterprise-4.0/webapp/WEB-INF/web.xml を編集し、以下の行を追加してメールセッションを有効にします。

    <resource-ref>
<res-ref-name>mail/MailSession</res-ref-name>
<res-type>javax.mail.Session</res-type>
<res-auth>Container</res-auth>
</resource-ref>

6. jira.home の設定
このプロパティは今回から必要になったようです。
atlassian-jira-enterprise-4.0/webapp/WEB-INF/classes/jira-application.properties の jira.home に任意のディレクトリを絶対パスで指定します。

jira.home=/Users/yusukey/jirahome

7. 起動パラメータの調整
メールが文字化けしないためにも、 -Dmail.mime.decodeparameters=true というシステムプロパティを設定する必要があるそうです。
JBoss の場合は run.conf に設定します。
また、パーマネント領域を以前よりも多く消費するため、最大を256m程度に設定するのが推奨だとか。
メモリが潤沢にあるわけではないので、とりあえず200mに設定しました。
また、ヒープ領域はいままで最大150mでうごかしていましたが、GC が頻発して思いので 200m まで増やしました。
結果、run.conf で設定する jvm オプションはこんな形に。

JAVA_OPTS="-Dnetworkaddress.cache.ttl=10 -Duser.home=/Users/yusukey
-DHUDSON_HOME=/Users/yusukey/.hudson -XX:+DisableExplicitGC
-XX:+UseParNewGC -XX:+UseConcMarkSweepGC -XX:+CMSPermGenSweepingEnabled
-XX:+CMSClassUnloadingEnabled -XX:+PrintGCTimeStamps -XX:+PrintGCDetails
-Xloggc:gclog.txt -Dorg.apache.jasper.runtime.BodyContentImpl.LIMIT_BUFFER=true
-XX:MaxTenuringThreshold=32 -XX:SurvivorRatio=8 -XX:NewSize=70m
-XX:MaxNewSize=70m -Xms200m -Xmx200m -server -Djava.awt.headless=true
-XX:PermSize=40m -XX:MaxPermSize=200m -Xss128k
-Dmail.mime.decodeparameters=true"

8. warのビルド、デプロイ

atlassian-jira-enterprise-4.0$ ./build.sh war
Buildfile: build.xml

init:
.
.
.
————————————————–
Deployable WARs generated:

TOMCAT: /Users/yusukey/Downloads/atlassian-jira-enterprise-4.0/dist-tomcat/atlassian-jira-4.0.war
GENERIC: /Users/yusukey/Downloads/atlassian-jira-enterprise-4.0/dist-generic/atlassian-jira-4.0.war

See http://www.atlassian.com/software/jira/docs/latest/servers/ for install instructions
————————————————–

BUILD SUCCESSFUL
Total time: 6 minutes 54 seconds
————————————————–

$ mv dist-tomcat/tomcat-6/atlassian-jira-4.0.war $JBOSS_HOME/server/default/deploy/jira.war

9. データのインポート
Jira にアクセスし、インポート。あらかじめライセンスをアップグレードしておくか、評価ライセンスを取得しておく必要があります。
Import Existing Data
File name: /Users/yusukey/jirabackup.xml

10. アップグレード完了!
以上でバージョンアップが完了。
jira.home を設定する以外は以前とほとんど変わらない手順でした。

AJAX ベースのインターフェースになって以前よりもサクサクと使えるようになりました。

ただ、デプロイ時にいくらかエラーが発生しており、ダッシュボードが見られません。
Welcome – JIRA

エラーメッセージの根本原因はほとんどこんな感じ

Caused by: org.osgi.framework.BundleException: Unresolved constraint
in bundle 41: package; (&(package=org.apache.log4j)(version>=1.2.0))

おそらく JBoss 特有の現象です。
関連しそうな issue もいくつかありました。
[#JRA-18259] Lockup JIRA on startup if there's an OSGiContainerExceptions being thrown – Atlassian JIRA
[#JRA-16381] Test compatibility with JBoss 5 – Atlassian JIRA
とりあえず使えているのでこの問題についてはまたの機会に・・。

関連記事:
アトラシアン(Atlassian)製品の価格と購入方法
Atlassian が Jira4 をリリース – 指名ユーザライセンス制を導入 – 侍ズム
Jira 3.13.1 へ FishEye プラグイン 2.3 をインストール
Jira をバージョン 3.13.1 へアップデート – 侍ズム
FishEye 1.6.3 のインストール
Jira をバージョン 3.12.3 へアップデート