システムコマンド実行について

1,017 views
Skip to first unread message

hiroshi.o

unread,
Aug 19, 2011, 1:04:56 AM8/19/11
to Redmine Users (japanese)
初めて投稿させていただきます。

チケットの作成/変更に応じて(=ワークフローの状態遷移をトリガに)、
システムコマンド実行したり、APIを介して他のシステムを呼び出したりしたいと考えています。

デフォルトでは、Redmineにそのような機能が見当たらないのですが、
これを実現するカスタマイズやプラグインをどなたかご存知無いでしょうか。

なお、外部からRedmineのREST APIを定期的に呼び出し、
チケットの状態を確認する方式でも実現可能とは思います。
ただ、状態変更を即時に検知するためにはポーリング周期を極端に短くせねばならず、
Redmineサーバの過負荷が心配なため、他の実現手段を模索しています。

恐れ入りますが、よろしくお願い致します。

hiro

unread,
Aug 22, 2011, 9:47:09 PM8/22/11
to Redmine Users (japanese)
こんにちは.

Rails(ActiveRecord)のコールバック機能を利用して自前で実装するのが一番楽な気がします.
Redmine本体を直接カスタマイズすることに抵抗がないなら,app/models/issue.rb に手を入れます.
以下はサンプルです.

before_save ..., :set_last_status
after_save ..., :additional_action

def set_last_status
# 保存前のステータスを保持しておく
@last_status = new_record? ? nil : IssueStatus.find(status_id_was)
end

def additional_action
if @last_status.nil? && status.name == "新規"
# 新規作成時の処理をここに書く

elsif @last_status != status && status.name == "終了"
# 終了時の処理をここに書く

end
end

Redmine本体を弄りたくない場合はちょっと難易度が上がりますが,
http://www.redmine.org/projects/redmine/wiki/Plugin_Internals#Using-Rails-callbacks-in-Redmine-plugins
この辺を参考にプラグイン化すると良いでしょう.

nobu_toyofuku

unread,
Aug 24, 2011, 4:54:28 AM8/24/11
to redmine-...@googlegroups.com
豊福です。

> チケットの作成/変更に応じて(=ワークフローの状態遷移をトリガに)、
> システムコマンド実行したり、APIを介して他のシステムを呼び出したりしたいと考えています。

mail alias をいじれる環境でしたら、Redmine に mail alias 用の
アカウントをつくりそのアカウントのメール通知の設定を
「参加しているプロジェクトのすべての通知」
にしておき mail alias でスクリプトを呼び出す
という手はどうでしょう。
---

hiroshi.o

unread,
Aug 29, 2011, 9:58:03 PM8/29/11
to Redmine Users (japanese)
hiroさん、

回答ありがとうございます。
サンプルまで用意してくださって助かりました。
また、返事するのが遅くなってすいません。

できることならば、本体を直接カスタマイズしないで行いたいと思っているため、
プラグインのほうで行っていきたいと思っています。
用意してくださったサンプルを試したところ、実現したいことが可能なので、
プラグインができなかった場合はそちらを使用したいと考えています。

ありがとうございました。

hiroshi.o

unread,
Aug 30, 2011, 1:55:26 AM8/30/11
to Redmine Users (japanese)
豊福さん、

回答ありがとうございます。
また、豊福さんに対しても返事するのが遅くなってすいません。

mail aliasでスクリプトを呼び出すということなのですが、
各チケットの状態に対応した個別のアクションを設定しようとした場合、
受信したメール本文の内容をパースする必要があるという認識であっていますか。

追加の質問となってしまって申し訳ありませんが、
恐れ入りますがよろしくお願い致します。

nobu_toyofuku

unread,
Sep 1, 2011, 4:54:22 AM9/1/11
to redmine-...@googlegroups.com
豊福です。
返信し忘れていて遅くなりました。すみません。

> mail aliasでスクリプトを呼び出すということなのですが、
> 各チケットの状態に対応した個別のアクションを設定しようとした場合、
> 受信したメール本文の内容をパースする必要があるという認識であっていますか。

はい。そういうつもりでした。
ただそのときは「Status: 担当」みたいな比較的パースしやすい通知メール
だったかなと思いながら書いたのですが今確認したら
「ステータス 新規から担当に変更」
のような日本語の文でくるのですね。
---

hiroshi.o

unread,
Sep 1, 2011, 8:25:48 PM9/1/11
to Redmine Users (japanese)
豊福さん、
回答していただきありがとうございます。

やはりパースする必要があるということなのですね。
変更後だけですと「ステータス: 進行中」のように書かれているのでパースしやすいのですが、
変更前も必要なので、文でパースするしかなさそうです。



hiroさんと豊福さんの適切でわかりやすい回答によって、
非常に助けられたと同時に勉強させていただきました。
貴重なお時間を割いていただき、本当にありがとうございました。
Reply all
Reply to author
Forward
0 new messages