Hubotを使ってSlackからHTTPトリガーを実行する

Trigger

Posted on Feb 18


こんにちは、Cloud Automator開発チームの柳瀬です。

昨年くらいからコミュニケーションツールとしてSlackを採用している会社やチームが増えていると思いますが、今回のブログでは、Hubotを使ってSlackとCloud Automatorのジョブを連動させる例をご紹介したいと思います。
HubotはGitHub社が開発したbot開発のフレームワークです。こちらはすでに色々なところで紹介されておりますので、詳しい紹介は割愛します。

概要図

今回ご紹介する全体図は以下のようになります。
HubotをHerokで動作させ、Slackでの発言をきっかけにCloud Automatorのジョブを実行します。

ローカルにHubot環境を用意する

基本設定やパッケージアップデートをした後、Hubotを導入するために必要なパッケージをインストールします。今回の用途では必須ではないですが、Hubotでデータを永続化したい場合にRedisを使いますので、インストールして起動します。

$ sudo yum install epel-release git wget ruby
$ sudo yum install nodejs npm redis
$ sudo systemctl enable redis
$ sudo systemctl start redis

npmでHubotや関連するパッケージをインストールします。

$ sudo npm install -g hubot coffee-script generator-hubot

今回のBot用にプロジェクトのひな形を作成します。
yo hubotを実行するといくつかの質問の後に必要なファイルが自動生成されます。今回はSlackと連携させる予定ですので、アダプタはslackを指定して下さい。

$ mkdir my-hubot
$ cd my-hubot
$ 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
==========================================================================: Yes
                     _____________________________  
                    /                             \ 
   //\              |      Extracting input for    |
  ////\    _____    |   self-replication process   |
 //////\  /_____\   \                             / 
 ======= |[^_/\_]|   /----------------------------  
  |   | _|___@@__|__                                
  +===+/  ///     \_\                               
   | |_\ /// HUBOT/\\                             
   |___/\//      /  \\                            
         \      /   +---+                            
          \____/    |   |                            
           | //|    +===+                            
            \//      |xx|                            

[?] Owner: okochang
[?] Description: A simple helpful robot for your Company
[?] Bot adapter: (campfire) slack
[?] Bot adapter: slack
   create bin/hubot
   create bin/hubot.cmd
   create Procfile
   create README.md
   create external-scripts.json
   create hubot-scripts.json
   create .gitignore
   create package.json
   create scripts/example.coffee
   create .editorconfig

以下省略

環境が整ったことを確認するために、Hubotを起動してpingコマンドを実行します。

$ bin/hubot
Hubot> hubot ping
PONG
Hubot> exit

サンプルスクリプト作成

Cloud Automatorと連携するスクリプトをscripts/cloudautomator.coffeeとして保存します。

実行したいジョブの詳細画面を開き、赤枠の部分をコピーして環境変数にセットします。

$ export CA_JOB_TOKEN=d2c784016c50e02fdcdb8345c90e9f28
$ export CA_JOB_URL=1077ba6bf8133718807253c38e2d581c

ローカル環境で正しく動作するか確認しておきます。

$ ./bin/hubot
Hubot> hubot cloudautomator 開発環境起動してね
Hubot> 仰せのままに

SlackのIntegration設定

HubotがSlackと通信するために必要となるAPIトークンを以下のURLから取得します。botの名前を指定するだけなので設定は難しいものではありません。

Heroku Toolbeltのインストール

Herokuの操作をコマンドラインから実行出来るようにするためにHeroku Toolbeltをインストールします。インストール後、コマンドラインからHerokuにログインします。
※事前にHerokuへのサインアップは済ませておいて下さい

$ cd ~
$ wget -qO- https://toolbelt.heroku.com/install.sh | sh
$ echo 'PATH="/usr/local/heroku/bin:$PATH"' >> ~/.bash_profile
$ heroku login

Heorkuにアプリケーションを作成する

Hubotの実行環境となるアプリケーションをHerokuに作成して、Redisのアドオンと以下の環境変数の設定をします。
※アプリケーション名は適宜変更して下さい

  • HUBOT_HEROKU_KEEPALIVE_URL : heroku apps:infoで表示されたURLをセットします
  • HUBOT_SLACK_TOKEN : Slackで取得したAPIトークンをセットします
  • CA_JOB_TOKEN : 開発環境でセットしたものと同じ値をセットします
  • CA_JOB_URL : 開発環境でセットしたものと同じ値をセットします
$ heroku create my-hubot
$ heroku addons:add redistogo:nano --app my-hubot
$ heroku apps:info --app my-hubot |grep "Web URL"
$ heroku config:set HUBOT_HEROKU_KEEPALIVE_URL=https://my-hubot.herokuapp.com/ --app my-hubot
$ heroku config:set HUBOT_SLACK_TOKEN=xoxb-setyourslacktokenkey --app my-hubot
$ heroku config:set CA_JOB_TOKEN=d2c784016c50e02fdcdb8345c90e9f28 --app my-hubot
$ heroku config:set CA_JOB_URL=1077ba6bf8133718807253c38e2d581c --app my-hubot
$ cd my-hubot
$ git remote add heroku https://git.heroku.com/my-hubot.git
$ git push heroku master

動作確認

デプロイが完了したら、動作させたいチャネルでbotアカウントを招待します。
以下のようにSlackで発言すると従順なbotがジョブを実行してくれます。

まとめ

以前のブログでもHTTPトリガーのサンプル以外の実行方法をご紹介しましたが、今回のようにHubotと連携することも可能です。 HTTPトリガーは外部サービスと連携しやすいので、これからも色々な方法をご紹介したいと思います。

参考リンク



Search

Tags

By year

  1. 2017 (1)
  2. 2016 (30)
  3. 2015 (31)
  4. 2014 (42)