Table of Contents

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/ に配置する方法でもメール送信を行なうことができます。