Webhookを使った連携の次は、botフレームワークHubotを使った連携を紹介します。
Hubotとは、GitHub社がMITライセンスで公開している、botを作成し動かすためのフレームワークです。Node.jsで動作し、CoffeeScriptやJavaScriptで作成可能です。Hubotを使うと、チャットツールに常駐し、ユーザーがチャットに投稿した内容から他のアプリケーションを動かしたり、定期的にHubotがチャットに投稿してユーザーに情報を発信したりすることができます。
今回は、RocketChatと連携させるHubot環境の作り方と、Hubotを使ってRocketChatからCIツールであるJenkinsを操作することを目指します。
なお、本連載ではHubotそのものについては深く紹介しません。Hubotの詳細については以下の連載記事で詳しく説明されているため、そちらも参考にしてください。
まず、RocketChatと連携させるHubot環境の作り方を紹介します。もしHubot環境をゼロから作る場合はNode.jsやHubotのインストールの他、botをデーモン化する場合にはその設定など、いくつか作業が必要となります。しかし、前回紹介したDockerを使ったRocketChatの構築と同様、RocketChatと連携させるためのHubot環境もDockerのコンテナイメージとして提供されているため、簡単に構築できます。
以下、RocketChat+Hubot連携の設定の流れを記載します。なお、以降の手順は前回紹介したRocketChat環境が構築されていることが前提なので、まだRocketChat環境を構築していない方は、前回記事を参考にしてください。
まず、RocketChatにHubotがログインするためのユーザーを作成します。ここでは「RocketchatBot」というユーザーを作成します。
続いて、Hubotのコンテナイメージをpullで取得します。
# docker pull rocketchat/hubot-rocketchat Using default tag: latest latest: Pulling from rocketchat/hubot-rocketchat df22f9f3e4ec: Pull complete a3ed95caeb02: Pull complete a2f74b08a06b: Pull complete 29b84dd39cd5: Pull complete a85bd624bab4: Pull complete 505aadf959ef: Pull complete f0b7db63de04: Pull complete a35a7eb59f97: Pull complete 48bdf4bb2181: Pull complete 473f7edf77f0: Pull complete 1e4081b99e15: Pull complete dcfae6280f86: Pull complete Digest: sha256:59b61f83c6aa26beaaf68b0361fd8cab0764ea93f569bfbd65cc6ec83a53a6a8 Status: Downloaded newer image for rocketchat/hubot-rocketchat:latest # docker images REPOSITORY TAG IMAGE ID CREATED SIZE rocketchat/rocket.chat latest d4cc7fb62744 3 days ago 405.2 MB mongo latest af52553e1c34 3 days ago 327 MB rocketchat/hubot-rocketchat latest 5b9483827da5 32 hours ago 800.3 MB
なお、本連載の執筆時(2016年10月)に取得したコンテナイメージにおけるHubotの環境情報は以下の通りです。
最後に、前回のRocketChat環境構築で作成したDocker Composeファイルを修正し、Hubotコンテナに関する記述を追加します。
まず、Hubotスクリプトのデータをホスト側にマウントするためのディレクトリを作成します。前回同様、ここでは「/var/www/」配下に作成していますが、自身の環境に合わせて修正してください。
# mkdir -p /var/www/rocket.chat/data/hubot
そして、Docker Composeファイル(/var/www/rocket.chat/docker-compose.yml)にHubotコンテナに関する記述を追加します(32行目以下)。
db: # コンテナイメージを指定(image:コンテナイメージ名:タグ名) image: mongo:latest # コンテナのデータをボリュームとしてホストOSにマウント volumes: # MongoDBのデータをマウント - ./data/runtime/db:/data/db # MongoDBのdumpファイルをマウント - ./data/dump:/dump # MongoDBのjournalファイルをsmallfilesとする command: mongod --smallfiles rocketchat: # コンテナイメージを指定(image:コンテナイメージ名:タグ名) image: rocketchat/rocket.chat:latest # 環境変数を設定 environment: # MongoDB(db)のURLを指定 - MONGO_URL=mongodb://db:27017/rocketchat # RocketChatのURL(ここではホスト名をlocalhostとしています) - ROOT_URL=http://localhost # アカウントのメールアドレスのドメインチェックを無効化 - Accounts_UseDNSDomainCheck=false # MongoDB(db)へのリンクを指定 links: - db:db # RocketChatのポートを設定 ports: - 3000:3000 hubot: image: rocketchat/hubot-rocketchat:latest volumes: # hubotscriptsのコンテナのデータをボリュームとしてホストOSにマウント - ./data/hubot:/var/www/hubotscripts environment: # RocketChatのURL(環境に合わせてIPアドレスを修正) - ROCKETCHAT_URL=[IPアドレス]:3000 # 連携させるチャンネル名 - ROCKETCHAT_ROOM=hubot # RocketChatにログインするための認証情報(ユーザーとパスワード) - ROCKETCHAT_USER=RocketchatBot - ROCKETCHAT_PASSWORD=RocketchatBot # bot名 - BOT_NAME=RocketchatBot # 外部スクリプト - _EXTERNALSCRIPTS=hubot-diagnostics,hubot-help,hubot-seen,hubot-links,hubot-greetings # JenkinsのURL(環境に合わせてIPアドレスを修正) - HUBOT_JENKINS_URL=http://[IPアドレス]:8080 # Jenkinsにログインするための認証情報(ユーザーとパスワード) - HUBOT_JENKINS_AUTH=admin:admin links: - rocketchat:rocketchat
設定項目 | 値 | 説明 |
---|---|---|
ROCKETCHAT_URL | [IPアドレス]:3000 | RocketChatのURL(環境に合わせてIPアドレスを修正) |
ROCKETCHAT_ROOM | hubot | 連携させるチャンネル名 |
ROCKETCHAT_USER | RocketchatBot | RocketChatのログイン情報(ユーザー) |
ROCKETCHAT_PASSWORD | RocketchatBot | RocketChatのログイン情報(パスワード) |
BOT_NAME | RocketchatBot | bot名 |
HUBOT_JENKINS_URL | http://[IPアドレス]:8080 | JenkinsのURL(環境に合わせてIPアドレスを修正) ※後述するJenkinsとの連携で使用 |
HUBOT_JENKINS_AUTH | admin:admin | Jenkinsのログイン情報(ユーザー:パスワード) ※後述するJenkinsとの連携で使用 |
以上で設定は完了です。Hubotコンテナを起動してみましょう。
# docker-compose up -d Starting rocketchat_db_1 Starting rocketchat_rocketchat_1 Creating rocketchat_hubot_1 # docker-compose ps Name Command State Ports ----------------------------------------------------------------------------------------- rocketchat_db_1 /entrypoint.sh mongod --sm ... Up 27017/tcp rocketchat_hubot_1 /bin/sh -c node -e "consol ... Up rocketchat_rocketchat_1 node main.js Up 0.0.0.0:3000->3000/tcp
Hubotコンテナが起動できていたら、HubotがRocketChatにログインしているか確認します。RocketChat画面から「#hubot」チャンネルを選択し、画面右の「メンバーリスト」を選択してください。「rocketchatbot」というユーザーがいれば、Hubotがログインできています。
HubotがRocketChatにログインできていたら、チャットでHubotに話し掛けてみましょう。Hubotがログインしている「#hubot」チャンネルにて、「@rocketchatbot: ping」と投稿してください。以下のように、Hubotから「PONG」と返事がくれば成功です。
Copyright © ITmedia, Inc. All Rights Reserved.