井原(@ihara2525)です。
今つくっているRailsアプリケーションのデプロイにはCapistrano 3を使っています。
slackistranoというgemを使うとデプロイの開始や終了を簡単にSlackに通知できるようになるのですが、終了の通知にgitの最後のコミットの内容とそれへのリンクが含まれるように、ちょっとカスタマイズしてみます。
通知されるようにする設定自体は、slackistranoのREADME通りにやればさくっとできると思います。
で、slack_msg_finishedという値でデプロイ終了時のメッセージを設定できるようなのでそれを変更します。
config/deproy.rb
set :slack_msg_finished, -> { "#{ENV['USER'] || ENV['USERNAME']} has finished deploying branch #{fetch(:branch)} of #{fetch(:application)} to #{fetch(:rails_env, 'production')}.\n> #{fetch(:git_last_commit_message)}" }
get_last_commit_messageという値は別のタスクをつくってそちらで設定します。 (repo_urlがgit@github.comであることを前提にしているので、ここをもう少し賢くしてあげると良さそうですね。)
lib/capistrano/tasks/git.rake
namespace :git do task :last_commit_message do repository_path = "#{fetch(:deploy_to)}/repo" on roles(:db) do within repository_path do repo_path = fetch(:repo_url).scan(/git@github\.com:(.*)\.git/).flatten[0] message = capture :git, 'log', '-1', %{--pretty=format:'<https://github.com/#{repo_path}/commit/%h|%h> - %an: "%s"' HEAD} set :git_last_commit_message, message.force_encoding('UTF-8') end end end end
あとは、Slackへの通知が終了する前に、このgit:last_commit_messageを呼び出してgit_last_commit_messageに値が設定されるようにしましょう。
config/deploy.rb
before 'slack:deploy:finished', 'git:last_commit_message'
slackistranoのREADMEにあるように、
$ cap production slack:deploy:finished
で通知のテストができるので実行してみると、こんな感じの通知になっていると思います。
今は一人で開発をやっているのでコミットの内容も全部把握しているわけですが、、複数人での開発になると便利だと思います!多分!