Differences

This shows you the differences between two versions of the page.

Link to this comparison view

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