LoginSignup
14
14

More than 5 years have passed since last update.

DockerでSlack hubotコンテナを作成するまでメモ

Last updated at Posted at 2014-12-28

修正

最新のhubot-slackで十分とのご指摘をいただいたので書き直しました。

制約等

  • herokuの代わりにローカルのCentOS 6.5で動かす
  • Slackのprivate groupでも使えるようにするため、adapterとしてhubot-slackの代わりにhubot-xmppを使う

バージョン

以下で行っているが、バージョンの制約については未検証
* Docker 1.3.2
* nodebrew 0.7.5
* node 0.10.35
* npm 1.4.28
* yo 1.3.3
* coffee 1.8.0
* hubot 2.11.0
* hubot-xmpp 0.1.12

準備

Dockerfile

試行錯誤の結果以下のようになっている。

  • 変更の影響範囲を最小限にする意図で、node関連の作業はnon-rootユーザーのディレクトリで、npm installはグローバルインストールなしで行うようにしている。
  • hubotの作成はinteraction無視で自動にしている。yes | yo hubot --defaults
  • 目的通り、HUBOT_XMPP_ROOMSにはprivate groupを含めることができる。
FROM centos:centos6
RUN sed -i 's/mirrorlist=http/#mirrorlist=http/g'                                    /etc/yum.repos.d/CentOS-Base.repo
RUN sed -i 's!#baseurl=http://mirror.centos.org!baseurl=http://ftp.riken.jp/Linux!g' /etc/yum.repos.d/CentOS-Base.repo
RUN yum -y install which
RUN yum -y install perl
RUN yum -y install tar
RUN yum -y install gcc-c++
RUN yum -y install libicu-devel.x86_64
RUN useradd hubot


USER hubot
RUN mkdir /home/hubot/myslackbot
WORKDIR /home/hubot/myslackbot

RUN curl -k -L git.io/nodebrew | perl - setup
ENV PATH /home/hubot/.nodebrew/current/bin:$PATH
RUN nodebrew install v0.10.35
RUN nodebrew use 0.10.35
ENV PATH /home/hubot/myslackbot/node_modules/.bin:$PATH

RUN npm install  generator-hubot
RUN npm install  yo
RUN npm install  coffee-script
RUN npm install  hubot
RUN npm install  hubot-xmpp

RUN yes | yo hubot --defaults

ENV HUBOT_LOG_LEVEL     debug

# https://TEAM.slack.com/account/gateways
ENV HUBOT_XMPP_HOST     conference.TEAM.xmpp.slack.com
ENV HUBOT_XMPP_USERNAME BOTNAME@conference.TEAM.xmpp.slack.com
ENV HUBOT_XMPP_PASSWORD TEAM.PASSWORD
ENV HUBOT_XMPP_ROOMS    CHANNEL1@conference.TEAM.xmpp.slack.com,GROUP2@conference.TEAM.xmpp.slack.com
ENV HUBOT_XMPP_PORT     5222

RUN hubot -a xmpp

これをdocker build .する。

対話

botが起動したのを確かめたら/inviteする。
スクリーンショット 2014-12-28 15.54.25.png
時計がずれているのはcontainer側でまだntpとか設定していないため。

HUBOT_LOG_LEVELdebugにしていると、docker logs CONTAINERIDなどでdebug logが見られる。単純ではあるが、adapterが受け取った文字列がscriptに渡されて正規表現マッチさせている様子がわかる。

[Tue Dec 23 2014 13:45:23 GMT+0000 (GMT)] DEBUG Received message: hubot time in room: gt@conference.conference.TEAM.xmpp.slack.com, from: satoda. Private chat JID is satoda@conference.TEAM.xmpp.slack.com
[Tue Dec 23 2014 13:45:23 GMT+0000 (GMT)] DEBUG Message 'hubot time' matched regex //^\s*[@]?Hubot[:,]?\s*(?:TIME$)/i/
[Tue Dec 23 2014 13:45:23 GMT+0000 (GMT)] DEBUG Sending to gt@conference.conference.TEAM.xmpp.slack.com: Server time is: Tue Dec 23 2014 13:45:23 GMT+0000 (GMT)
[Tue Dec 23 2014 13:45:24 GMT+0000 (GMT)] DEBUG Received message: Server time is: Tue Dec 23 2014 13:45:23 GMT+0000 (GMT) in room: gt@conference.conference.TEAM.xmpp.slack.com, from: xmppsatoda. Private chat JID is undefined

検証パスした事項

  • HUBOT_XMPP_PORTの指定は不要かも
  • package.jsonを外からADDするようにしてもいいかもしれないが、うまくできなかった(いずれにしてもyo hubotが必要?)
  • node 0.11のときにうまくできなかった
  • (hubot関係ないけど)yumのrepository指定は外してもよいかも

宿題

  • botを/inviteしたタイミングがhubotが起動・接続する前であった場合は、いったん/removeしてから/inviteする必要がある?これ何とかしたい。
  • 接続・プロセス管理、デーモン化
  • hubot logにredisとかherokuのエラーが出ているので、使わなくするか、エラーが出ないようにする
14
14
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
14
14