takedajs ログ

備考録

CapistranoのデプロイをSlackに通知する

CapistranoとSlackを連携して、CapistranoのデプロイをSlackに通知させてみました。
RubyGemsであるcapistrano-slackifyを利用して、通知を行います。

Capistranoが導入されていることを前提に今回の記事を書いています。
まだ導入していない方は、以下の記事を参考に導入までを行ってみてください。

開発環境

capistrano 3.10.0
・デプロイ元: ローカルのMac
・デプロイ先: Vagrant(CentOS7)

capistrano-slackify導入

Gemfileにcapistrano-slackifyを記述。

group :development do
  gem "capistrano", "~> 3.10"
  gem "capistrano-slackify"
end

capistrano-slackifyをインストール。

$ bundle install

capistrano-slackifyの導入確認。

$ bundle list

Gems included by the bundle:
  * capistrano (3.10.0)
  * capistrano-slackify (2.9.0)

Capfileに以下を追加。

require "capistrano/slackify"

Slack設定

Slackでワークスペースを作成。
https://slack.com/

デプロイ通知を送るチャンネルを作成。今回は#リリースを作成しました。

f:id:takedajs:20171115200437p:plain

以下サイトにアクセスして通知に必要なWebhook URLを取得します。
https://slack.com/services/new/incoming-webhook

チャンネルを指定して、「Add Incoming WebHooks integration」を押下するとWebhook URLが表示されます。 後で利用するため、コピーしておいてください。

f:id:takedajs:20171115200523p:plain

config/deploy.rbに以下を記述。
Webhook URL作成時にチャンネルを指定したのですが、#generalに通知されてしまい、明示的に#リリースを指定することで解決。

set :slack_url, "[Webhook URL]"
set :slack_channel, "#リリース"

デプロイをSlackに通知

Capistranoでデプロイ。

$ bundle exec cap develop deploy

デプロイ開始と結果が#リリースに通知されます。
この画像では、開始と成功の通知が表示されてします。

f:id:takedajs:20171115202735p:plain

失敗した場合はこのように通知されます。

f:id:takedajs:20171115202752p:plain

通知をカスタマイズ

デフォルトの通知内容だと少し味気ないので、 絵文字とテキストをカスタマイズしてみます。

config/deploy.rbに以下を追記。

# デプロイ開始時
set :slack_emoji, ":pray:"
set :slack_username, "Capistrano < お願いします!!いっけー!!"

# デプロイ成功時
before 'slack:notify_finished', :deploy_success do
  set :slack_emoji,    ':dancers:'
  set :slack_username, "Capistrano < すごいー!!やったねー!!"
end

# デプロイ失敗時
before 'slack:notify_failed', :deploy_failure do
  set :slack_emoji,    ':imp:'
  set :slack_username, 'Capistrano < あかんやつやっ!!'
end

カスタマイズ結果。
先程と違い、デプロイが少し楽しくなりますね。デプロイ開始の成功してくれー!と祈ってるアイコンがお気に入りですw

f:id:takedajs:20171115202814p:plain

まとめ

Slackで作成したWebhookURLをCapistrano側に渡すだけなので、比較的簡単に連携ができました。 デプロイ結果をslackに通知することで、チーム内の生産性も上がりそうですね。

参考

GitHub - onthebeach/capistrano-slackify: Publish deployment notifications to Slack via the incoming webhooks integration

Capistrano の Slack 通知で、デプロイ開始・成功・失敗時の emoji を変える | blog: takahiro okumura