2017年に新たに書き直したのでこちらも参考にしてください
[[2017年版]HubotをSlackで利用 ローカル環境構築、デバッグ、およびHerokuへのデプロイ方法]
(http://qiita.com/kon_yu/items/57fb169cb871a009393b)
ブログより転載
http://konyu.hatenablog.com/entry/2014/05/13/214812
hubotとは
GitHub社が開発しMITライセンスで公開しているNode.jsでbotを作り動かすためのフレームワークです。
Hubotの大きな特徴に,様々なチャットツールに対応している点があります。たとえば,先ほど取り上げたikachanは,IRC用のbotを作るためのフレームワークであり,Twitterのbotを作る目的には使えません。一方でtwittbotはTwitter専用であり,IRC用のbotを作ることはできません。しかし,Hubotは,Hubotとチャットツールをつなぐモジュールである「Adapter」を切り替えることで様々なチャットツールに接続することができます。
refshttp://gihyo.jp/dev/serial/01/hubot/0001
本体のコードはここhttps://hubot.github.com/
node.jsで動くボットで、hipchatやchatworks,slackなどと連携できるツールなのだ。
大体はそのチャットツールでhubotに命令を投げ、タスクを実行してもらい結果を返してもらうのだ。
どんな使い方をするか言うとJenkinsを回したり、デプロイしたりするのに使ったりする。
hubotのボットを記述する言語はCofeeScriptで記載するのだ。
今回の目的
hipchatを使って、hubotから本番環境へCacpistranoを使ってデプロイするのを目的とし、以下の項目で記載する
- hubotをインストール
- hubotとhipchatと連携
- foreverを使ってhubotをデーモン化
- 目的用のCoffeeScriptを記載する
今回のサーバ環境
AWS EC2 のCentOS6.4
Hubotのインストール
Hubotを本体をインストールするには、node.jsとNoSQLのRedisが必要、それらをインストールする
refs http://kray.jp/blog/hubot/
###epelのリポジトリを追加
$ sudo rpm -ivh http://ftp.jaist.ac.jp/pub/Linux/Fedora/epel/6/x86_64/epel-release-6-8.noarch.rpm
node.jsとRedisをインストール
$ sudo yum install npm redis
# y/n を途中で聞かれるので、yを入力してEnter
Redis起動
$ sudo /etc/init.d/redis start
#Redis 自動起動設定
$ sudo chkconfig redis on
coffeeScriptとhubotをインストール
$ sudo npm install -g coffee-script hubot
# warning が出たりするが、とりあえず大丈夫
Hubotのひな形を作成
# mybotというhubotを作成する
$ hubot --create mybot
$ cd mybot
$ npm install
Hubotの動作確認
$ cd mybot
# hubot起動
$ ./bin/hubot
Hubot> hubot ping
Hubot> PONG #ってエコーが返ってくる
Hubot> hubot pug me
# パグの画像のURLが表示される
Hubot> http://24.media.tumblr.com/tumblr_lhowz2fAnC1qaa50yo1_500.jpg
# 終了
Hubot> exit
Hipchatの準備
アカウントを作る
テスト用に自分のアカウントでhubotを使って自分に対して @self pingとか送っても
レスポンスがないんので、ちゃんとhubot用にアカウントをつくる必要がある
hipchatのadmin権限があれば作れるので、管理者じゃない人は管理者に作ってもらいましょう
Jabber IDを取得する
hipchatをhubotで使うには、アカウントのパスワードとJabber ID というものが必要
Jabber IDはhipchatのPCサイトにログインして
https://username.hipchat.com/account/xmpp で確認する。
HubotにHipchat用プラグインをインストールする
# 依存するライブラリをインストールする
$ sudo yum install libicu-devel
# HipChatで使えるようにするのにhubot-hipchatをインストールする
$ npm install hubot-hipchat --save
hipchat用の環境変数を設定する
先ほど取得した、hubotのhipchatアカウントのJabber IDとパスワードをそれぞれ
HUBOT_HIPCHAT_JID、HUBOT_HIPCHAT_PASSWORDとして環境変数を設定する
$ export HUBOT_HIPCHAT_JID="12345_12345678@chat.hipchat.com"
$ export HUBOT_HIPCHAT_PASSWORD="xxxxxxxxxx"
Hipchatを起動する
Hipchatと連携してHubotを起動するには、-a でアダプタの設定をする
$ bin/hubot -a hipchat
こうするとこんな感じで、hipchatからhubotのアカウントに対して、メンションを送ると先ほど黒い画面で実行した内容と同じものを返してくれる。
hipchatでmisawaとかしょうもない機能を入れる
地獄のミサワの画像をランダムに表示する機能と、LTTMを表示する機能を追加する。
# botが実行するCoffeeScriptのあるディレクトリに行き、対象のScriptをDLする
$ cd mybot/scripts
# misawa
$ wget https://raw.githubusercontent.com/mosaz/hubot/master/scripts/misawa.coffee --no-check-certificate
# lgtm
$ wget https://raw.githubusercontent.com/bizground/hubot-bizground-co-jp/master/scripts/lgtm.coffee --no-check-certificate
hubotを再起動することで、Scriptを実行できるようになる
")foreverでhubotをデーモン化する
refs <http://blog.manaten.net/entry/617
http://onlineconsultant.jp/pukiwiki/?node.js%20node.js%E3%82%B9%E3%82%AF%E3%83%AA%E3%83%97%E3%83%88%E3%82%92forever%E3%81%A7%E3%83%87%E3%83%BC%E3%83%A2%E3%83%B3%E5%8C%96%E3%81%99%E3%82%8B>
# foreverをインストール
$ sudo npm install forever -g
foremanで、起動するスクリプトを作成する
run.shを実行ファイルを作り、以下の内容を記載する
#!/bin/bash
# 環境変数の設定
export HUBOT_HIPCHAT_JID="1234561234@chat.hipchat.com"
export HUBOT_HIPCHAT_PASSWORD="xxxxxxxxxx"
# foreverでhubotをデーモンで起動
forever start -c coffee node_modules/.bin/hubot -a hipchat
シェルの実行
$ ./run.sh
これでHubotがデーモン化される
追加のHubot実行スクリプトを作成する
scriptsの下にmyscript.cofeeというhubot用のCoffeeScriptを作成する
# Commands:
# hubot myscript
module.exports = (robot) ->
#単純なエコーを返すだけ。@hubot hi ==> hiと返してくれる
robot.respond /hi/i, (msg) ->
msg.send 'hi'
#ビールを飲むの最適な時間を教えてくれる。@hubot ビール飲むのはいつ? ==> いつ飲めばいいか教えてくれる画像を返す
robot.respond /ビール飲むのはいつ?/i, (msg) ->
msg.send 'http://up.gc-img.net/post_img/2013/11/GB4KRx3cBCc77MN_9pDVt_29.jpeg'
#Webアプリケーションをデプロイする。Capistaranoのコマンドをたたいてデプロイ @hubot release production ==> production, stage, test などパラメタを指定しでデプロイする
robot.respond /release (.*)$/i, (msg) ->
# hipchatからの文字から引数を取得
env = msg.match[1]
# OSコマンドを実行する準備
@exec = require('child_process').exec
command = "cd /xxx/xxx/xxx/app && cap TARGET=#{env} deploy prams"
msg.send "This is the command #{command}."
# OSコマンドを実行する
@exec command, (error, stdout, stderr) ->
msg.send error
msg.send stdout
msg.send stderr