趣味でやってるアプリ開発でcapistrano3でデプロイ実行時にslack通知を導入した際の備忘録です。
実現したいこと
自分ひとりでやってたらコンソールのログを見ていたら良いのですが、チーム開発をしてるときにデプロイ状況を確実に共有するために通知を実装しました。
deployに時間がかからないので開始時の通知はしないようにします。
使ったgem
実装方法
Gemfileにslackifyを追加
gem "capistrano-slackify"
インストール
bundle install
Capfileに1行追加してrequrie
require "capistrano/slackify"
これで使う準備が整いました。
次に、通知の設定を行います。config/deploy.rbに記述するとすべてのdeployに適用されるので、そこに書きます。
# 通知
set :slack_url, "https://hooks.slack.com/services/XXXXXXXXXXX"
set :slack_channel, "#your_channel"
# 開始時の通知を除いたリスト
set :slack_notify_events, [:finished, :failed]
# 通知内容カスタム
set :slack_fields, ['status', 'stage', 'branch', 'hosts']
# デプロイ成功時
before 'slack:notify_finished', :deploy_success do
set :slack_emoji, ':dancers:'
set :slack_username, "Deploy成功"
end
# デプロイ失敗時
before 'slack:notify_failed', :deploy_failure do
set :slack_emoji, ':imp:'
set :slack_username, 'Deploy失敗'
end
slack_notify_events
通知を行うイベントのリストが入ってるので上書きします。
https://github.com/onthebeach/capistrano-slackify/blob/master/lib/capistrano/tasks/slackify.cap#L86
ここを見ると
開始、成功、失敗の3パターンにデフォルトで通知されます。
開始の通知が必要なかったため、[:finished, :failed]
と指定しました。
slack_fields
通知に含めるfieldを指定します。
https://github.com/onthebeach/capistrano-slackify/blob/master/lib/capistrano/tasks/slackify.cap#L65
ここを見るとデフォルトで5つ指定されていますが、revisionは必要性を感じなかったので減らしました。
これで通知内容が1行減るので見た目的にはかなりスッキリします。
最後に
非常に簡単に通知の実装をすることができるので便利でした。
失敗した時のエラー内容まで反映できたらとても素敵だなとコメントをもらったりもしました。デフォルトのイベントにdeploy:log_revisionってのがあるので、そこで使ってる情報をあれこれしたらできるかもしれないですね。