最近ChatOpsに興味が出てきたので、とりあえずEC2上にhubotが動作する環境を作り、slackと連携出来るようにしました。
前提
以下の環境が既にあること。
- EC2
- slack
環境構築
- nvm〜hubotの起動までは全てEC2上での作業です。
nvmのインストール
- curlでインストールします
sudo curl -o- https://raw.githubusercontent.com/creationix/nvm/v0.33.2/install.sh | bash
- .bash_profileに以下を追記します
export NVM_DIR="$HOME/.nvm"
[ -s "$NVM_DIR/nvm.sh" ] && . "$NVM_DIR/nvm.sh" # This loads nvm
- nvmコマンドが実行できることを確認します
nvm help
nodejsのインストール
- nvmでnodejsのv6.11.0をインストールします
- 公式サイトを見ると
includes npm 3.10.10
と書いてあるのでnpmも一緒にインストールされます
nvm install 6.11.0
- インストールされたことを確認します
node -v
npm -v
redisのインストール
- elasticacheは使わずAmazon Linux上にredisをインストールします
- epelだとバージョンが古いようなのでremiを利用します
sudo rpm -Uvh http://rpms.famillecollet.com/enterprise/remi-release-6.rpm
sudo yum --enablerepo=remi install redis
- redisを起動させます
sudo service redis start
hubotのインストール
- hubotの環境を構築します
- npmでhubot,coffescript,redis,yo,generator-hubotをインストールします
npm install -g hubot coffee-script redis yo generator-hubot
- hubotをインストールします
mkdir -p ~/deploy-sushi
cd deploy-sushi
yo hubot
- 対話式で色々聞かれるので自身の環境に合わせて入力してください
? ==========================================================================
We're constantly looking for ways to make yo better!
May we anonymously report usage statistics to improve the tool over time?
More info: https://github.com/yeoman/insight & http://yeoman.io
========================================================================== Y/no
省略
? Owner (User <user@example.com>)
? Bot name (deploy-sushi)
? Description (A simple helpful robot for your Company)
? Bot adapter (campfire)
- 今回は?4つに以下のように答えました
? Owner {MY_EMAIL}
? Bot name deploy-sushi
? Description this is deploy boy
? Bot adapter slack
- hubotを立ち上げて動作確認をします
bin/hubot
- いろんなメッセージが出た後にEnterを押せば
deploy-sushi>
という対話が始まります
deploy-sushi> deploy-sushi ping
deploy-sushi> PONG
- hubot-slackをnpmでインストールします
npm install hubot-slack
slackと連携させる
- slack上の操作に変わります
- slackのサイドメニューを開き
Configure Apps
を開きます
- 画面上部に
Hubot
を入力し、検索結果をクリックします
- Installボタンをクリックします
- hubotの名前を入力して Add Hubot Integrationをクリックします
- 作成が完了したらhubotの詳細画面に遷移するので画面上部の
Setup Instructions
のところに記載されているHUBOT_SLACK_TOKEN={YOUR_API_TOKEN}
をコピーしておきます 画像を変更する・・・など何か編集を加えた場合、画面下部の保存ボタンをクリックして更新してください
EC2に戻り以下の環境変数をexportします
echo 'export HUBOT_SLACK_TOKEN={YOUR_API_TOKEN}' >> ~/.bash_profile
source ~/.bash_profile
- アダプタを指定してhubotを起動します
bin/hubot --adapter slack
- slackのどこかのチャンネルにhubotをinviteして動作確認します
- 動作確認ができたらEC2起動時に自動でhubotが立ち上がるようにします
hubotの永続実行
- foreverをnpmでインストールします
npm install -g forever
-
bin/hubot
を書き換えます
以下を追記
forever start -w -c coffee node_modules/.bin/hubot --adapter slack
以下をコメントアウト
exec node_modules/.bin/hubot --name "deploy-sushi" "$@"
- バックグラウンドで動くことを確認します
bin/hubot
ps aux | grep hubot
EC2起動時のスクリプト作成
sudo vi /etc/init.d/start_deploy_hubot
- 以下を記述します
- chkconfigのランレベルと優先度については以下参照
- https://webkaru.net/linux/run-level/
#!/bin/bash
#chkconfig: 2345 99 10
#descpriction: start deploy hubot
DIR="/home/ec2-user/deploy-sushi"
cd $DIR
bin/hubot
- 実行権限を付与します
sudo chmod 755 /etc/init.d/start_deploy_hubot
- サービスに追加します
sudo chkconfig --add start_deploy_hubot
- EC2インスタンスを再起動してhubotが立ち上がっていることを確認してください
hubotが起動しなかった・・・
- npm,foreverのパスがec2-userにしか通っていないかったのでrootでnpm,foreverするとコマンドが見つからない。
- トークンもec2-userの
.bash_profile
に記述していたので見つからない。 - とりいそぎ
bin/hubot
に以下を追記しました-
npm install
よりも前に追記してください
-
export PATH="/home/ec2-user/.nvm/versions/node/v6.11.0/bin:$PATH"
export HUBOT_SLACK_TOKEN={YOUR_API_TOKEN}
- EC2を再起動して、hubotが立ち上がっていることを確認してください
- プロセスの確認をします
ps aux | grep hubot
- slackのチャンネルでもpingして返答があることを確認してください
おわり
hubotがサーバ上で動き続けるようになったので、次回はslackからgit操作を出来るようにしようと思います。