17
15

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

rubyスクリプトでsvnコミット通知をslackに送る

Last updated at Posted at 2015-03-10

#はじめに
諸事情でgitではなくsvnを部分的に使っています。
svnにコミットしたら、slack の incoming-webhook で通知するようにした記録です。

ちなみにスクリプト本体はruby2.2.0で書きました。
gemがあるようですが、使うほどでもないと思って素で書きました。

#Slackで Incoming WebHooks を登録
設定画面の「Integrations」から「Incoming WebHooks」を新規追加(ページ最下部あたり)

slack.PNG

参考
http://www.bunnyhop.jp/lab-20141020/

#svnサーバーで post-commit を記述

###locale追加

$ sudo apt-get install language-pack-ja

Ubuntu14.04(x64) @ EC2 を使っていたのでlocale追加が必要でした。

###post-commitに追記
※リポジトリパスは随時読み替えてください

post-commit
LANG=ja_JP.UTF-8

REPOS="$1"
REV="$2"

/home/svn/.rbenv/shims/ruby /home/svn/repos/myapp/hooks/post-commit.rb $REV

##post-commit.rbを作成して hooks/ に置く

post-commit.rb
#!/usr/bin/env ruby
# encoding: utf-8

require 'net/http'
require 'uri'
require 'json'

# POSTリクエストメソッド
#
def post(text)
  # コミット通知メッセージをJSONに
  data = {
    "text" => text
  }

  # slackで発行したwebhookURLをセット
  request_url = "https://hooks.slack.com/services/XXXXXXX/XXXXXXX/XXXXXXXXXXXXXXXXXXXXXX"
  uri = URI.parse(request_url)
  http = Net::HTTP.post_form(uri, {"payload" => data.to_json})
end

# リビジョン番号
rev = ARGV[0].to_s

# author情報取得
cmd = "svnlook author /home/svn/repos/myapp -r #{rev}"
author = `#{cmd}`

# コミットメッセージ取得
cmd = "/usr/bin/env LANG=ja_JP.UTF-8 /usr/bin/svnlook log /home/svn/repos/myapp -r #{rev}"
log = `#{cmd}`

# slackに通知してもらうテキストをつくる(ここはご自由に)
msg = "#{log.chomp!} - commit by #{author.chomp!} - rev:#{rev}"

# POSTリクエスト
post(msg.force_encoding("UTF-8"))

##コミット通知がslackに飛んでくる
sla.PNG

※必要であればデスクトップ通知も設定しておく

#ハマった点

  • locale追加して日本語の ja_JP.UTF-8 を作成すること(EC2だったから)
  • force_encodingすること(これをしないと文字化けした)

#番外(Jenkins連携)
もうひとつ incoming-webhook を登録して Jenkinsのビルドエラーもslack通知で検知できるようにしました。
※ #jenkins チャンネルをつくってここに通知するようにしました。

jenkins.PNG

Jenkinsにはすでに「Jenkins Slack Plugin」があるので、これを使うと簡単に連携できます。
これについてはここを参考にさせてもらいました。
http://r9.hateblo.jp/entry/2014/01/26/145538

#Slackフリープランの場合の注意点
まずIntegrationsは5つまでです。
他の連携が必要な場合はそのあたりを考慮する必要があります。

また、Slackのフリープランでは月の投稿数が10,000と限られています。
ですので、通知を増やせば当然上限に早く達する恐れがあります。

自分のチームの場合、コミット通知と、時々Jenkinsに怒られる通知を含めても、
10,000の上限にはまず達することはないと判断したのでこういった運用にしています。

17
15
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
17
15

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?