LoginSignup
8
3

More than 3 years have passed since last update.

capistrano3でデプロイ時にslack通知する

Posted at

趣味でやってるアプリ開発でcapistrano3でデプロイ実行時にslack通知を導入した際の備忘録です。

実現したいこと

自分ひとりでやってたらコンソールのログを見ていたら良いのですが、チーム開発をしてるときにデプロイ状況を確実に共有するために通知を実装しました。
deployに時間がかからないので開始時の通知はしないようにします。

使ったgem

capistrano-slackify

実装方法

Gemfileにslackifyを追加

Gemfile
gem "capistrano-slackify"

インストール

bundle install

Capfileに1行追加してrequrie

Capfile
require "capistrano/slackify"

これで使う準備が整いました。

次に、通知の設定を行います。config/deploy.rbに記述するとすべてのdeployに適用されるので、そこに書きます。

config/deploy.rb
# 通知
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ってのがあるので、そこで使ってる情報をあれこれしたらできるかもしれないですね。

参考

8
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
8
3