JIRA の運用例
1年8ヶ月ぶりにブログを書くという、なんとも申し訳ない気分になりながら、今日は JIRA についてエントリを書きたいと思います。というか、ただ @yusukey に JIRA Advent Calendar 2011 で管理 Tips なのを書いてくれるはず、という無茶ぶりをされたからですがw
JIRA は Jiemamy で使われており、その管理を担当しているのもあって、数年前からお世話になっている BTS ではありますが、これがなんとも管理がややこしい!細かいことができる分、管理もそれなりにややこしいです。今回は Jiemamy JIRA で行っている管理手法について紹介したいと思います。前提として、Jiemamy JIRA は WAR 版を使っています。スタンドアロン版だと、ついてきている Tomcat のバージョンがちょっと古かったりするので、脆弱性が残っている場合があるためです。そのため、Tomcat は最新のバージョンをなるべく追えるように、JIRA は WAR 版を使っています。
環境の用意
何はともあれ、まずは環境を用意しないと何も始まりません。Jiemamy のサーバでは、OS の Tomcat パッケージを使って JIRA を動かしています。JIRA 以外にも、Confluence や Bamboo 等を動かしているので、最初は単一の Tomcat 上ですべてのアプリケーションを動かす、ということをやっていました。もちろん、こういうことをやるとサポート対象外なのでやめましょうw
なので、Tomcat のインスタンス 1つあたり、1つの Atlassian 製品を動作させるのが鉄則になってきます。普通に考えると、OS から提供される Tomcat パッケージを使おうにも、1つの Tomcat インスタンスしか上げられないので、結局こういうところから Tomcat をダウンロードして、1つずつ環境を構築して、Tomcat のセキュリティアップデートが出てくると、すべての Tomcat を一斉にアップデートして・・・ということをやると思います。
ですが、Fedora とかで提供されている Tomcat パッケージはマルチインスタンス化が可能です。簡単には会社のブログで書いていて、ここではインスタンス 1つごとのディレクトリを /usr/share/instance/ 配下に全部まとめたんですが、Jiemamy のサーバでは次のようにディレクトリを細かく分けています。これは、元々の Tomcat パッケージのデフォルトのディレクトリ構成 (/usr/share/tomcat6/ ディレクトリ) を踏襲しています。
ディレクトリパス | 実体のパス |
---|---|
/usr/share/instance/bin | /usr/share/instance/bin |
/usr/share/instance/conf | /etc/instance |
/usr/share/instance/lib | /usr/share/java/instance |
/usr/share/instance/logs | /var/log/instance |
/usr/share/instance/temp | /var/cache/instance/temp |
/usr/share/instance/webapps | /opt/instance/webapps |
/usr/share/instance/work | /var/cache/instance/work |
それぞれのディレクトリの所有者やアクセス権は、基本的に Tomcat パッケージのデフォルトのディレクトリ構成を真似ます。なんで webapps ディレクトリが /var/lib/instance 配下じゃなくて /opt/instance 配下になっているかですが、/var/lib/instance 配下は jira.home にしているからですw
JIRA のバージョンアップ作業
JIRA を運用していると、JIRA もバージョンアップが重ねられますし、時にセキュリティ上問題があるので早急にアップデートを行う必要が出てくる場面もあるかと思います。でも、結構 JIRA のアップデートって面倒くさいですよね。war ファイルをぽん、と置くだけじゃないですし、毎回 build.sh を叩く必要があります。そして問題が発生すれば以前のバージョンに切り戻したり、と。何かと手間がかかります。だがそれがいい。
Jiemamy JIRA では、だいたい次のような手順でバージョンアップを行っています。
- 最新版の JIRA の WAR 版をダウンロードし、/opt/instance/ ディレクトリ配下に展開する。
- /opt/instance/atlassian-jira-x.x.x-war/edit-webapp/ ディレクトリ配下を適切に編集する。
- /opt/instance/atlassian-jira-x.x.x-war/build.sh を叩いて war ファイルを生成する。
- 作成した war ファイルを /opt/instance/webapps/ ディレクトリ配下に置く。
これでバージョンアップが完了です。edit-webapp に置くファイルとかをバージョン管理とかに上げておくと、楽かもしれないですね。ちなみに、Tomcat をバージョンアップすることになっても、CATALINA_HOME と CATALINA_BASE は分けてあるので、基本的に /opt/instance/webapps/ ディレクトリ配下は何も手を加える必要がありません。yum update tomcat6 を実行するだけで、すべてのインスタンスの Tomcat のバージョンアップが完了するからです。便利ですね!
上記の手順は少し間違えています。正しい JIRA のインストール手順についてはWAR 版 JIRA のインストール方法 - von Ewigkeitに書きました。
バックアップ関連
さて、ほとんど書くこともなくなってきたので、最後にバックアップの運用例を紹介します。
Jiemamy サーバでは、cron を使って日次でバックアップを取っています。バックアップには独自で作ったスクリプトを使っていますが、JIRA のバックアップに当たっては、だいたい次のようなことをしています。
- JIRA のデータベースをバックアップ。Jiemamy のサーバは PostgreSQL を使っているので、pg_dump を使っています。
- ${jira.home}/data/ ディレクトリを丸ごとバックアップ。
だいたいこれだけ。まぁ、これで十分かなって。というか、どういうデータをバックアップすべきかは、ちゃんとドキュメントに載っています。JIRA だけではなく、Confluence とかも載ってた気がします。ドキュメント重要。
いかがでしたでしょうか。JIRA 管理の Tips を書く、という無茶ぶりを受けつつ、結局書いたのは運用例なので、なんとも拍子抜けさせてしまっているというか、なんというかw
皆様の JIRA 運用のちょっとした参考になれば幸いです。
さて、明日の JIRA Advent Calendar は、エロ部長こと @j5ik2o がお届けします!