SlackからJenkinsのジョブの実行(Windows)

ChatOpsの開発現場への導入が進んできています。ChatOpsとは、HipChatやSlackなどのチャットツールを通じてオペレーションを行うものです。ChatOpsのメリットはあらゆるオペレーションを共有できることにあります。誰がどのような操作を行ったのか、その結果がどうなったのか。これまで個人のPCで行われてきたブラックボックス的な作業が誰からも確認できるようになり、問題が発生した場合もチャットの履歴からどの操作が問題になったか特定しやすくなります。また、自動化の仕組みを全員で共有できる点も大きいでしょう。このChatOpsの仕組みを実現する方法としては、Hubotの利用があります。

Hubotは、GitHub社が開発しているbotフレームワークです。CoffeeScriptやJavaScriptで処理を書くことで，簡単に機能を拡張できます。また，TypetalkやTwitterなど，複数のサービスに対応させることができます。Hubotを導入することで、例えばチャット上からHubotにデプロイをさせたり、自分が担当しているissueの一覧を表示してもらったり、JenkinsなどによるCI（継続的インテグレーション）の実行やその結果を受け取ることができるようになります。今回はSlackとJenkinsを利用する方法について紹介を行います。
※ 執筆は2016/1/17時点の情報です。

#SlackにHubotを追加
Slack側の準備として、まずHubotのインテグレーションを追加します。このインテーグレーションは下記のサイトから入手することができます。
https://slack.com/apps

Hubotは下図のように検索すればすぐに見つかります。
![SnapCrab_NoName_2016-1-17_14-4-17_No-00.png](https://qiita-image-store.s3.amazonaws.com/0/78487/c988426f-0070-467d-98be-24ecf32a71f0.png)


#node.jsのインストール
Hubotを動かすためには、Jenkinsを入れているPCにnode.jsをインストールする必要があります。node.jsはJavaScriptで出来たWeb Serverで、下記サイトから入手できるmsiを使ってインストールすることができます。ここでは現時点での最新版であるv0.12.9を使用します。
http://nodejs.org/download/

node.jsのバージョンは、次のコマンドで確認することができます。バージョンが表示されれば、問題なくインストールが完了していることになります。

```
node -v
```

#Hubotのインストール
Hubotのインストールにはnpmと呼ばれるパッケージ管理ソフトを使用します。このnpmはnode.jsのインストール時に一緒にインストールされています。npmも次のコマンドでバージョンを確認することができます。

```
npm -v
```

セットアップ手順は下記リンクのマニュアルに記載されています。
https://github.com/github/hubot/blob/master/docs/index.md

ただ、今回は次のコマンドを実行することでインストールを行います。

```
npm install -g yo generator-hubot hubot coffee-script
```

インストールが完了したら、下記の2つのフォルダが作成されます。

- yo : 雛形作成コマンド
- generator-hubot : yo を利用したHubotの雛形生成
- hubot : Hubot本体
- coffee-script : CoffeeScript本体(bot動作記述用)

#Hubotの生成
Hubotを作成したいフォルダを作り、そのフォルダの中で次のコマンドを実行します。

```
yo hubot
```

最初に使用状況統計の報告の協力を聞かれますので、"Y"か"n"で回答します。
![SnapCrab_NoName_2016-1-17_14-30-50_No-00.png](https://qiita-image-store.s3.amazonaws.com/0/78487/39687c20-44f7-1a41-7591-c9aec1bb3559.png)

その後は、以下の設定を求められるので、順次設定を行っていきます。

- Owner : 制作者のメールアドレス
- Bot name : 生成するHubotの名前
- Description : 生成するHubotの説明
- Bot adapter : slack

ここまで入力すれば、無事にHubotが生成されます。
![SnapCrab_NoName_2016-1-17_14-43-56_No-00.png](https://qiita-image-store.s3.amazonaws.com/0/78487/c431e366-aea4-81d2-728c-c80878155d75.png)

試しにHubotを動かしてみます。まず、次のコマンドを入力します。

```
bin\hubot.cmd
```

その次に、{Hubotの名前} ping とコマンドを指定します。Hubotがうまく動作していれば、PONGと返してくれます。
![SnapCrab_NoName_2016-1-17_15-33-8_No-00.png](https://qiita-image-store.s3.amazonaws.com/0/78487/a1444786-e229-5df3-ed33-6e40a198f688.png)

# HubotとSlackの連携
まず、環境変数として「HUBOT_SLACK_TOKEN」を設定します。トークンはSlackのインテグレーション登録時に入手できます。

次に、下記のコマンドでHubotを起動します。これでSlack上でもHubotと会話することができるようになります。

```
bin\hubot.cmd --adapter slack
```

# Hubotを常駐させるためのforeverのインストール
Hubotをslackのチャットルームに常駐させるためには、foreverでデーモン起動できるようにする必要があります。foreverは次のコマンドでインストールすることができます。

```
npm install -g forever
```

インストール後は、次のコマンドを実行します。

```
forever --minUptime 3000 --spinSleepTime 3000 start -c coffee bin\hubot.cmd --adapter slack --name {hubotの名前}
```

次のコマンドを実行して再起動を行います。

```
forever restartall
```

#Hubotからjenkinsの呼び出し
Hubotを作成したフォルダ内の「scripts」内にjenkins.coffeeを作成します。
作成したファイルに下記リンクの内容をコピーします。
https://github.com/github/hubot-scripts/blob/master/src/scripts/jenkins.coffee

次に、Hubotを作成したフォルダ内のhubot-scripts.jsonの中身を、下記の記述に変更します。

```
[
    "jenkins.coffee"
]
```

あとは環境変数にJenkinsのURLと認証情報をを追加します。

- HUBOT_JENKINS_URL : "http://xxxxxxxxxxxxxxxxxx/"
- HUBOT_JENKINS_AUTH : "username:password"

#SlackからJenkinsのジョブを実行
最後にSlackからのジョブの実行について紹介します。

```
# ジョブを実行
@{hubotの名前} jenkins build ジョブ名
 
# 登録されているジョブのリストを表示
@{hubotの名前} jenkins list
```

#参考
Software Design 2016/1
[slack・hubot・jenkinsを連携してslackからjenkinsのジョブを実行する](http://www.bunkei-programmer.net/entry/2015/04/18/031011)