Hubot
Docker
Slack

dockerでhubot + slack

More than 3 years have passed since last update.

Slack 用の bot を Hubotdocker を使ってつくったのでメモ


Dockerfile


Dockerfile

FROM node:latest

MAINTAINER nabe

RUN npm install -g hubot coffee-script
RUN npm install hubot-slack --save

RUN hubot --create bot

ADD hubot-scripts.json /bot/hubot-scripts.json
ADD package.json /bot/package.json
ADD scripts/hello.coffee /bot/scripts/

ENV REDIS_URL redis://localhost:6379

ENV HUBOT_NAME @bot
ENV PORT 9999

ENV HUBOT_SLACK_TOKEN <yourtoken>
ENV HUBOT_SLACK_TEAM <yourteam>
ENV HUBOT_SLACK_BOTNAME bot
ENV HUBOT_SLACK_CHANNELMODE whitelist
ENV HUBOT_SLACK_CHANNELS test

EXPOSE 9999

CMD cd /bot; bin/hubot --adapter slack


HUBOT_SLACK_TOKEN は Slack から取得します

ちなみに、HUBOT_SLACK_CHANNELMODE で whitelist を指定しているので、HUBOT_SLACK_CHANNELS で設定した #test チャンネルしか受け付けなくなっています


設定ファイル

Dockerfile と同じディレクトリに作成します


hubot-scripts.json

["redis-brain.coffee"]



package.json

{

"name": "hosted-hubot",
"version": "2.7.1",
"private": true,

"author": "GitHub Inc.",

"keywords": [
"github",
"hubot",
"campfire",
"bot"
],

"description": "A simple helpful robot for your Company",

"licenses": [{
"type": "MIT",
"url": "https://github.com/github/hubot/raw/master/LICENSE"
}],

"repository" : {
"type": "git",
"url": "https://github.com/github/hubot.git"
},

"dependencies": {
"hubot": ">= 2.6.0 < 3.0.0",
"hubot-scripts": ">= 2.5.0 < 3.0.0",
"hubot-slack": ">= 2.2.0"
},

"engines": {
"node": ">= 0.8.x",
"npm": ">= 1.1.x"
}
}



scripts

Dockerfile のあるディレクトリに scripts/ を作成して、テスト用のスクリプトを設置します


hello.coffee

# Description:

# Test
#
# Commands:
# hubot hello - Say "Hi"

module.exports = (robot) ->
robot.respond /HELLO$/i, (msg) ->
# robot.brain.set msg.message.user.name, "test"
msg.send "Hi"



動かす

あとは、Dockerfile のあるディレクトリで以下を実行すればコンテナが起動して Slack のメッセージに反応するようになります

docker build -t bot .

docker run -d -p 9999:9999 --env REDIS_URL=redis://<host>:6379 bot

Redis の URL を指定すれば、メッセージを保存したりできます(コメントアウトしているやつを参考に)

Redis 使わない場合は Dockerfile などをよしなに修正してください

ちなみに、Redis も docker を使えば簡単に用意できます

docker run -d -p 6379:6379 -v <dir> redis redis-server --appendonly yes