Minaでデプロイした際にIRCへ通知する

minaでデプロイした際にIRCへ通知を行う様にしたのでその際の対応のメモ。ゴールとしては、IRCの任意のチャンネルにデプロイ開始時等にメッセージを流したいと思います。

f:id:hideack:20131113093442p:plain

そういえばIRCで流す文字に色を付けたい

上の様に貼った画像の様な形でIRC上に色つき文字で表示されると可視性も高くて良いのでStringIrc という便利GemをGemfileに追加しておきます。

# Gemfile
gem 'string-irc'

追加したら bundle install します。

config/deploy.rb にIRC通知用のtaskを追加

minaの設定中に、IRC通知用の定義を追加します。今回、自分は下の様な形で書いてみました。

require 'string-irc'

namespace :util do
  desc "#hoge IRC notice. (start)"
  task :irc_notice_for_start do
    messages = [
      StringIrc.new('[hoge Deploy] Start!').white('orange').bold.to_s,
      "---> #{Time.now.to_s}",
      "---> Deploy to: #{domain} / Git: #{repository} / Branch: #{branch}"
    ]

    messages.each do |message|
      irc_notice '#hoge', message
    end
  end
end

このタスク中にある、irc_notice というメソッドは別途定義していますが省略します。役割的には任意のチャンネルに任意の文字列を通知できる様にしています。*1

試しにこのタスクだけ動作を確認したければ、

$ bundle exec mina util:irc_notice_for_start

で確認できます。

deployタスク中にIRC通知用タスク追加

上まで準備できたら実際にMinaの deploy タスク中に上で新設したIRC通知用のタスクを追加します。

# config/deploy.rb
# (中略)
desc "Deploys the current version to the server."
task :deploy => :environment do
  deploy do
    # Put things that will set up an empty directory into a fully set-up
    # instance of your project.
    invoke :'util:irc_notice_for_start'   # ここを追加した
    invoke :'git:clone'
    invoke :'deploy:link_shared_paths'
    invoke :'bundle:install'

以上で準備が完了です。実際にMinaで

$ bundle exec mina deploy

とすれば、設定したIRCのチャンネルへデプロイ通知された上でデプロイが行われます。

*1:Ikachan環境があればそのホストに向けてPOSTする形