SlackでHubotとCircleCI使ってHerokuにDeployできるようにしてみた
どうもこんにちは。最近 twitter 再開しました (宣伝)
今日は知り合いが Slack に招待してくれたので Hubot でアレコレしたのをまとめてみます。
Hubotをとりあえず導入
まずは Slack に Hubot を導入する必要があります。今回は Heroku で動かそうと思います。
こちらのページを参考にしました。
Local環境整備
最初に hubot を local で動かすための環境を準備します
$ brew install node redis $ npm install -g hubot coffee-script
これを入れておけば hubot の application のひな形を作成可能です。試しに作ってみます。
$ hubot --create test_bot $ cd test_bot $ ls -l total 48 -rw-r--r-- 1 sasarky staff 36 6 15 17:40 Procfile -rw-r--r-- 1 sasarky staff 5903 6 15 17:40 README.md drwxr-xr-x 4 sasarky staff 136 6 15 17:40 bin -rw-r--r-- 1 sasarky staff 3 6 15 17:40 external-scripts.json -rw-r--r-- 1 sasarky staff 40 6 15 17:40 hubot-scripts.json -rw-r--r-- 1 sasarky staff 609 6 15 17:40 package.json drwxr-xr-x 15 sasarky staff 510 6 15 17:40 scripts
こんな感じで、必要なファイルがある程度出来上がっています。
Localで実行
では先ほど作成した hubot のひな形を実際に実行してみます。
実行するには redis-server を動かして置く必要があります
$ redis-server&
これで hubot が動くはず。
初回起動時にはいろいろインストールしてるので眺めてればOK
$ bin/hubot Hubot> hubot ping Hubot> PONG Hubot>
HerokuへDeploy
これでローカルで動くようになったので、次は Heroku に Deploy してみる
Heroku の登録や ssh key などは省略します。Heroku コマンドを使うために heroku toolbelt みたいなのを予めインストールしておいてください。Heroku のページから download 可能です
まずは Heroku へ application の登録から。
# heroku へログインします。 mail, password を入力すればOK $ heroku login # このコマンドでアプリケーションを作成できます $ heroku create testbot # おまじないだと思って撃ちこめばOK $ heroku addons:add redistogo:nano
それといくつかファイルを編集しておく必要があります。↓のとおりにしておけば大丈夫なはず。
- Procfile
web: bin/hubot --adapter slack
- ~/.ssh/config
Host heroku.com HostName heroku.com IdentityFile ~/.ssh/id_rsa User git
準備は整いました。下記コマンドで Deploy 完了です。
$ git commit -am "initial commit" $ git push heroku master $ heroku ps:scale web=1
Slack連携
この段階で Heroku へデプロイまでが終わっていると思います。
続いては Slack と連携してみましょう。
Slack の integration で Hubot がありますのでそこから Hubot との連携に必要な Token などの情報が確認できます。それを↓のようにして heroku へ設定します。
この時についでに hubot の slack adapter も一緒にインストールします。
# slack と hubot をつないでくれる adapter みたいなやつを install $ npm install hubot-slack --save # 各環境変数を設定 $ heroku config:add HEROKU_URL=<url> $ heroku config:add HUBOT_SLACK_TOKEN=<token> $ heroku config:add HUBOT_SLACK_TEAM=<team> $ heroku config:add HUBOT_SLACK_BOTNAME=<botname>
この辺を設定しておけばあとは Slack で発言すれば hubot が反応してくれます
HubotでDeploy
hubot をいじっていると各々のローカルの環境で 'git push heroku master' とかをしないといけなくてめんどうだなー。とかあったので hubot さんのコマンドで Deploy できないか試行錯誤してみました。
hubotでgithub
まずは Hubot で Github の API を叩けるようにしたいです。
今回は githubot を使いました。これを使えば基本的な API を叩くことが可能です。
※ Github の API を叩くためには Github と Heroku の設定で Token の登録だったかをしないといけなかった気がする
これを package.json に追加してあげて
"dependencies": { # 略 "githubot": "*" },
こんなかんじのコードを書けば、 github の API をつかえます
github.get "#{url_api_base}/repos/#{user}/#{repo}/compare/master...develop", (info) ->
ちなみにこれは master と develop branch の diff を表示してくれるやつ
github の API を使って master へ merge する script を用意して(各々の運用方法によってどうするかは変わると思うけど)あげれば、 slack 上で github の操作が可能になります。
CircleCI でHerokuへDeploy
Hubot から Github を操作することはできるようになりましたが、 Heroku への Deploy も一緒にやってもらって楽をしたいです。
Heroku へ Deploy する方法はいくつかあると思いますが、一番手軽そうな CircleCI を利用しようと思います。
CircleCI は github account で登録可能で、どのリポジトリをどういう風にやるか。みたいな感じのことを設定できて簡単に導入できました。
挙動などの設定はプロジェクトのルートに circle.yml をおいておけばあとは push 時に勝手に動いてくれます。テストとかもガッツリできるんですけど、今回は deploy が目的なので簡単な設定です
- circle.yml
deployment: production: branch: master heroku: appname: <heroku の application name> test: post: - echo hoge
この設定は master branch に push があったら heroku に deploy してくれます。
実際に動かしてみると、こんなかんじでやってくれます。
これで Slack 上で Hubot を介して Heroku に Deploy できるようになりました。
最後に
ブログかくの苦手だってことがわかりました。