SlackでHubotを経由してRundeckのジョブを実行させる

RundeckのジョブをSlackから実行できないかと思ったところ、Hubot用のプラグインがあったのでこれでやってみることにする。
なお、事前にこちらからSlackへの追加・設定を終わらせておくこと。

1.Hubotの動作サーバを構築する

1-1.パッケージのインストール

まずは、Hubotを動かすためのサーバを構築する。今回の例ではOSはCentOS 7を用いる。
Node.jsやnpmが必要になるので、それらを含めもろもろ以下のコマンドでインストールする。

yum install -y epel-release
yum install -y nodejs redis npm
npm install -g coffee-script hubot yo generator-hubot

1-2.Botの作成

パッケージ類のインストールが完了したら、Botの作成を行おう。
以下、rootの場合は一般ユーザに切り替えて作業を行う。今回の例では、Bot名を「TestB」にする。
Adapterに関してはSlackを利用するので、今時点でそのように設定する。

mkdir TestB
cd TestB
yo hubot
[test@BS-PUB-CENT7-02 TestB]$ yo hubot
                     _____________________________
                    /                             \
   //\              |      Extracting input for    |
  ////\    _____    |   self-replication process   |
 //////\  /_____\   \                             /
 ======= |[^_/\_]|   /----------------------------
  |   | _|___@@__|__
  +===+/  ///     \_\
   | |_\ /// HUBOT/\\
   |___/\//      /  \\
         \      /   +---+
          \____/    |   |
           | //|    +===+
            \//      |xx|

? Owner test</span>
? Bot name testb</span>
? Description Test Bot
</span>? Bot adapter slack</span>
   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の作成ができたら、以下のコマンドを実行してhubot-rundeckのインストールをする。
なお、インストール後に一部ソースの修正をする(修正というか、コメントアウトをしないとジョブの操作ができなかった)。

npm install hubot-rundeck --save
sed -i '38s/^/#/g' node_modules/hubot-rundeck/src/rundeck.coffee
sed -i '2i \  "hubot-rundeck",' external-scripts.json
npm install forever --save
PATH=$PATH:./node_modules/.bin >> ~/.bash_profile
source ~/.bash_profile

以上の処理が完了したら、以下のコマンドでHubotを起動する。
※ちゃんと運用する場合は起動スクリプトを書こう。

HUBOT_SLACK_TOKEN=[SLACKのTOKEN] forever start -c coffee node_modules/.bin/hubot --adapter \slack

これで、botがバックグラウンドで実行されるようになった。

2.Slackでの設定・Hubotを介したRundeckの操作

Slack上でHubotを動作させるチャンネルで以下のメッセージを送り、Hubotを招待する。

/invite testb

これでBotが使えるようになった。
あとは、以下のようにBot向けにメッセージを送信してRundeckを操作する。

  • 設定されているRundeckサーバの一覧を取得
    →「@testb rundeck show aliases」
  • Rundeckサーバを登録する
    →「@testb rundeck add alias [エイリアス名] [RundeckサーバのURL] [APIキー]」
  • プロジェクトの確認
    →「@testb rundeck projects [エイリアス名]」
  • ジョブの確認
    →「@testb rundeck '[プロジェクト名]' jobs [エイリアス名]」
  • ジョブの実行
    →「@testb rundeck trigger '[ジョブ名]' '[プロジェクト名]' [エイリアス名]」

確かに、Slackからジョブをキックされることができた。
…ただ、Hubotを再起動するとエイリアスの情報が消えてしまうので再度登録が必要なのと、普通にエイリアスからAPIキー丸見えなのはどうなんだろうか。
常時動かすのはだめかもしれない。