Hubotをインストール、hipchatと連携し、foreverでデーモン化(CentOS6.4)

2017年に新たに書き直したのでこちらも参考にしてください
[[2017年版]HubotをSlackで利用 ローカル環境構築、デバッグ、およびHerokuへのデプロイ方法]
(http://qiita.com/kon_yu/items/57fb169cb871a009393b)

ブログより転載
http://konyu.hatenablog.com/entry/2014/05/13/214812


![hubot](https://octodex.github.com/images/hubot.jpg "hubot")

## hubotとは

> GitHub社が開発しMITライセンスで公開しているNode.jsでbotを作り動かすためのフレームワークです。
Hubotの大きな特徴に，様々なチャットツールに対応している点があります。たとえば，先ほど取り上げたikachanは，IRC用のbotを作るためのフレームワークであり，Twitterのbotを作る目的には使えません。一方でtwittbotはTwitter専用であり，IRC用のbotを作ることはできません。しかし，Hubotは，Hubotとチャットツールをつなぐモジュールである「Adapter」を切り替えることで様々なチャットツールに接続することができます。

refs<http://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 を途中で聞かれるので、ｙを入力して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
```

こんなかんじで パグの画像のURLが表示される
![pug](http://24.media.tumblr.com/tumblr_lhowz2fAnC1qaa50yo1_500.jpg "pug")



## 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を実行できるようになる**

<p><span itemscope itemtype="http://schema.org/Photograph"><img src="http://cdn-ak.f.st-hatena.com/images/fotolife/k/kon_yu/20140513/20140513213459.png" alt="f:id:kon_yu:20140513213459p:plain" title="f:id:kon_yu:20140513213459p:plain" class="hatena-fotolife" itemprop="image"></span></p>
")

<p><span itemscope itemtype="http://schema.org/Photograph"><img src="http://cdn-ak.f.st-hatena.com/images/fotolife/k/kon_yu/20140513/20140513213649.png" alt="f:id:kon_yu:20140513213649p:plain" title="f:id:kon_yu:20140513213649p:plain" class="hatena-fotolife" itemprop="image"></span></p>


## 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

```