最近は既存アプリで使ってる capistrano を2系から3系に上げる仕事をしているのですが、ChatWork通知周りのとある処理が汎用化できそうだったのでgemにしてリリースしました
capistrano-around_chatwork (0.1.0): post to ChatWork before and after the specified task http://t.co/AOET7DUVov
— RubyGems (@rubygems) 2015, 6月 3
どんなgem?
普通の通知系のgemは特定のtaskにフックさせて通知しますが、このgemはtaskの開始時と終了時にChatWorkに通知します。(beforeとafterを合体させたようなもの)
終了時にはtaskの処理時間もメッセージに含めることができます
使い方
Capfile
require "capistrano/around_chatwork"
config/deploy.rb
set :chatwork_api_token, "YOUR_API_TOKEN" set :chatwork_room_id, 00000000 around_chatwork "deploy"
ChatWorkのAPI tokenと通知先の部屋IDを設定し、前後を通知で囲みたいタスクを around_chatwork
に書くだけでokです。
chatwork_api_token
と chatwork_room_id
は capistrano-chatwork と全く同じものなので、capistrano-chatworkを導入してる場合は同じ設定を共有できます
通知メッセージを編集したい場合は starting_message
と ending_message
をいい感じに編集して下さい。
set :starting_message, -> { "[info][title][#{fetch(:stage)}] :task_name: @#{fetch(:user)}[/title]started[/info]" } set :ending_message, -> { "[info][title][#{fetch(:stage)}] :task_name: @#{fetch(:user)}[/title]done (:elapsed_time: sec)[/info]" }
文中の :task_name:
と :elapsed_time:
はフックしたタスク名とタスクの処理時間に置換されます。
詳しいこと
capタスクの前後に動的にタスクを設定したい
capistrano 3系の仕組みはRake taskがベースなので下記が参考になります
Rake で任意のタスクの前後に別のタスクを実行する - HsbtDiary(2012-02-10)
実際のコードはこんな感じです。
*1:ちなみにcapistranoのbefore/afterでも同じことをやっています https://github.com/capistrano/capistrano/blob/v3.4.0/lib/capistrano/dsl/task_enhancements.rb#L5-L16