====== hook機能について ====== ===== 概要 ===== hook機能は、チケットの登録・返信完了時に外部プログラムを呼び出す機能です。 hookとして、外部プログラムを設定すると、チケット登録・返信完了時に外部プログラムを実行させることが可能になります。 また、hookの呼び出しインターフェースが外部プログラムを呼び出す形式であるため、サーバ上の実行可能ファイルであれば、言語は問いません。 アイデアとしては、以下のようなことが実現できます。 ==== メール通知 ==== 登録された内容を、メーリングリストへメール送信するようスクリプトをhookに登録する。 ==== 登録ログ保存 ==== 登録された内容を、ファイルに保存するようスクリプトをhookに登録する。 ==== メッセンジャー通知 ==== 登録された内容を、メッセンジャーに自動投稿するスクリプトをhookに登録する。 ==== 再ビルド ==== 登録された内容から、プロジェクトのソースを自動ビルドするスクリプトをhookに登録する。 アイデア次第では、面白いことができるかもしれません。通常のインストールを行なうと、メール送信用の perl スクリプトのサンプルがscriptディレクトリに配置されます。(メール送信を行なうには、設定が必要です。) ===== hook機能の仕様 ===== Starbug1は、サーバ上でチケットの登録・返信完了時に以下の動作を行ないます。 ${Starbug1のインストールディレクトリ}/scriptディレクトリ内にある、hook_ で始まるファイル名の実行ファイルを検索します。実行ファイルが見付かった場合、送信内容をjson形式に変換し、環境変数${STARBUG1_CONTENT}に設定した状態で、実行ファイルを実行します。実行ファイルが複数存在した場合は、順に実行ファイルを実行します。 チケット登録・返信完了のメッセージと一緒に、スクリプトの実行結果を表示します。 hook機能に登録された外部スクリプトでエラーが発生した場合は、「登録が完了しました。」のメッセージの後に、スクリプトの実行が失敗した旨のメッセージが表示されます。 環境変数${STARBUG1_CONTENT}に設定されるjsonは以下のような形式になります。(ただし、見易いように整形してあります。) 各言語のjsonとオブジェクトの変換ライブラリで変換すれば、簡単に投稿内容を取得できます。 { project: { name: "テストサンプル プロジェクト"}, ticket: { id: 2, url: "http://popnuts.ddo.jp/starbug1/index.cgi/ticket/2", fields: [ { name: "件名", value: "誰でも投稿できるようになっていた件について" }, { name: "投稿者", value: "smeghead" }, { name: "状態", value: "受付済" }, { name: "カテゴリ", value: "画面 " }, { name: "優先度", value: "高" }, { name: "詳細", value: "テスト詳細2" }, { name: "再現手順", value: "テスト再現手順2" }, { name: "コメント", value: "" } ] } } ===== 添付のメール送信スクリプトの設定方法 ===== === perlモジュールのインストール === 添付のサンプルメール送信スクリプトは、HTTP::Dateと、JSON:Syckを利用しています。あらかじめ、cpanなどでインストールしておいてください。(JSON:Syckは、YAML:Syckに含まれています) === メール送信スクリプトの設定 === 添付のメール送信スクリプトの設定には、多少perlの知識が必要となります。 Starbug1に添付されているメール送信スクリプトの設定方法を説明します。 ${Starbug1のインストールディレクトリ}/scriptディレクトリに、sample.hook_sendmail.pl が存在します。 以下のコマンドで、メール送信スクリプトをhook_で始まるファイル名に変更します。 # cd ${Starbug1のインストールディレクトリ}/script # mv sample.hook_sendmail.pl hook_sendmail.pl スクリプトの一行目を、perlのpathに変更します。 #!/usr/local/bin/perl メール送信のための情報を設定します。$options というhashに対して設定を行ないます。 赤文字の部分がカスタマイズ部分です。 my $options = { #使用するSMTPホスト名 smtp_host => 'localhost', #使用するSMTPポート番号 smtp_port => 25, #送信するメールのFROMを指定してください。 from => 'project-admin@example.com', #メールの送信先を指定してください。通知したいメーリングリストのアドレスなど。 to => 'project-ml@example.com' }; 設定後、シンタックスエラーが無いかをチェックします。cオプションを指定して実行してください。 # perl -c hook_sendmail.pl 注意: ここで、モジュールが見付からないというエラーが発生した場合は、不足しているライブラリをインストールしてください。 以上の設定を行なった後、チケットの登録・返信を行なって、動作確認を行なってください。 ===== hookスクリプトの注意点 ===== ただし、さくらインターネットなどレンタルサーバでは外部プログラムの実行が制限されている場合があります。その場合、starbug1のソースのmodule/hook_mail にあるメール送信を行なう共有ライブラリを作成し、$(インストールディレクトリ)/script/ に配置する方法でもメール送信を行なうことができます。