FessでJIRA/Confluenceを高速に横断検索する


この記事では、全文検索サーバー Fessを利用してJIRAの課題(issue)やConfluenceのwikiコンテンツ等を横断検索する方法を紹介します。

これはFess上で実際にissueの検索を行っている画面のスクリーンショットです。

JIRA/Confluenceとは?

JIRAはAtlassian社が開発したソフトウェアで、課題管理、進捗管理、スケジュール管理など、プロジェクト全般を広く管理することができます。
Confluenceは同じくAtlassian社のソフトウェアで、JIRAと連携して、wikiで情報共有を行うことができます。

導入手順

FessでJIRA/Confluenceを横断検索するための手順を説明します。

導入の流れは次のようになります。

  1. プラグイン追加
  2. Fessの起動
  3. 認証設定
  4. クローラの設定・実行

1. プラグイン追加

Fessの現バージョン(12.2.0)には、デフォルトでは含まれていない機能であるため、自分で追加する必要があります。

ここからfess-ds-atlassian-12.2.0.jarをダウンロードします。
ダウンロードしたjarファイルは[Fessのパス]/app/WEB-INF/lib/に配置します。

2. Fessの起動

このページを参考にFessを起動します。

JIRAのサーバー版を利用している場合、デフォルトではhttp://localhost:8080/で起動します。
Fessもデフォルトではhttp://localhost:8080/で起動するため、そのままでは衝突してしまいます。
衝突を避けるには、例えばFessを起動する際、

$ ./bin/fess -Dfess.port=8081

というような感じで、ポート番号を指定すればよいです。

3. 認証設定

データを取得するために認証情報をパラメータとして与える必要があり、そのための設定を行います。
認証方法としてはBasic認証またはOAuthを利用します。

3A. Basic認証の場合

利用しているAtlassian製品のアカウントのユーザー名とパスワードをパラメータとして与えます。
ここでは、特にJIRA/Confluence側で設定することはありません。

3B. OAuthの場合

Atlassian製品のOAuthについてはこのページ通りに行います。
認証情報として必要になるのは、config.properties内の「secret」「jira_home」「consumer_key」「private_key」「access_token」です。
このチュートリアルにはJIRAのOAuthについて掲載されていますが、Confluenceでも同様の方法で認証することが出来ます。

以下、やる事だけを簡単にまとめました。

3B-1. RSA鍵生成

openssl genrsa -out jira_privatekey.pem 1024
openssl req -newkey rsa:1024 -x509 -key jira_privatekey.pem -out jira_publickey.cer -days 365
openssl pkcs8 -topk8 -nocrypt -in jira_privatekey.pem -out jira_privatekey.pcks8
openssl x509 -pubkey -noout -in jira_publickey.cer  > jira_publickey.pem

3B-2. OAuthTutorialClientの設定

hg clone https://bitbucket.org/atlassian_tutorial/atlassian-oauth-examples
cd atlassian-oauth-examples/java
mvn clean compile assembly:single
cd target
java -jar OAuthTutorialClient-1.0.jar requestToken

最後のコマンドではエラーが出ますが、config.propertiesを生成しているだけなので気にしなくて大丈夫です。
生成されたtarget内のconfig.propertiesは次の様に設定します。

jira_home=http\://localhost\:8080
consumer_key=OauthKey
private_key=MIICdw...AQE\=

jira_homeはJIRAのURL、
consumer_keyはそのままOauthKey
private_keyjira_privatekey.pcks8の中身から改行を削除したもの
に設定します。
若干エスケープが必要な文字があるので注意してください。

3B-3. JIRA/Confluence側の設定

アプリケーションリンクの設定(/plugins/servlet/applinks/listApplicationLinks)を開きます。
「リンクするアプリ〜」に適当なURL(例: http://example.com/)を入力して、新しいリンクを作成します。「入力したURLから応答がありません。」と言われますが続行します。

Link applicationsダイアログで必要事項を適当に入力して続行します。

必要事項を入力して続行します。
コンシューマーキーはconfig.propertiesと同じOauthKeyにします。
公開鍵はjira_publickey.pemの中身を貼り付けます。

3B-4. OAuth Dance

java -jar OAuthTutorialClient-1.0.jar requestToken

これを実行すると次のように出力されます。

Token:          xe8yADzgduOc1GwbLcKUQbyAbKlPhVTv
Token secret:   lGk0heoiVWKgyEVM1R5ANTJVfKMkKuiS
Retrieve request token. Go to http://localhost:8080/plugins/servlet/oauth/authorize?oauth_token=xe8yADzgduOc1GwbLcKUQbyAbKlPhVTv to authorize it.

指定されたURLを開き、「許可」すると、確認コードが表示されます。
確認コードを利用してアクセストークンを取得します。

java -jar OAuthTutorialClient-1.0.jar accessToken cEzTBX

これでJIRA/Confluence側のOAuthの設定が完了します。

4. クローラの設定・実行

JIRA/Confluenceをクロールするための設定をします。
公式ドキュメントのこのページも参考にしてください。

4-1. クローラの設定

Fessの管理画面を開き、クローラ > データストアと移動し、新規作成をします。
新規作成画面では、

  • 名前
  • ハンドラ
  • パラメータ
  • スクリプト

の4項目を設定して、作成を完了します。

「名前」には好きな文字列を入力してください。
「ハンドラ」はJiraDataStore(ConfluenceDataStore)を選択してください。
「パラメータ」は次のようなフォーマットで入力してください。

home=http://localhost:8080
oauth.consumer_key=OauthKey
oauth.private_key=MIICdw...QE=
oauth.secret=cEzTBX
oauth.access_token=W1jjOV...ye

キーと値の説明は次のようになります。

キー
home JIRA/ConfluenceのURL
oauth.consumer_key コンシューマーキー (OAuth)
oauth.private_key 秘密鍵 (OAuth)
oauth.secret 認証キー (OAuth)
oauth.access_token アクセストークン (OAuth)
basicauth.username ユーザ名 (Basic認証)
basicauth.password パスワード (Basic認証)
issue.jql JQL (JIRAのみ) (任意)

oauth.*については、config.propertiesの中身と対応しています。
また、この例ではOAuthを利用していますが、Basic認証またはOAuthのどちらかの認証情報が必要です。

「スクリプト」はJIRAとConfluenceで異なります。

JIRA

url=issue.view_url
title=issue.summary
content=issue.description + issue.comments
last_modified=issue.last_modified

取得出来る値のキーと値の説明は次のようになります。

キー
issue.view_url issueを閲覧するURL
issue.summary issueの要約
issue.description issueの説明
issue.comments issueのコメント
issue.last_modified issueの最終更新日時

Confluence

url=contentview_url
title=content.title
content=content.body + content.comments
last_modified=content.last_modified
キー
content.view_url ページを閲覧するURL
content.title ページのタイトル
content.body ページの中身
content.comments ページのコメント
content.last_modified ページの最終更新日時

設定画面はこんな感じになります。

4-2. ジョブスケジューラの作成

4-1で作成したクロールをクリックすると、クロール設定が開き、そこから「新しいジョブの作成」をします。

後からでも変更はできるので、とりあえず試す場合はそのままの設定で大丈夫です。
詳しいジョブスケジューラの設定については、このページを参考にしてください。

4-3. クローラの実行

システム > スケジューラと移動し、4-2で作成したジョブを開きます。
その画面から、「今すぐ開始」をします。

状態が「実行中」から「有効」になるまで待ちます。

4-4. 検索のテスト

左上の検索フォームから適当に検索してみます。

これでFessでJIRA/Confluenceを横断検索することが出来るようになりました。