:::: MENU ::::

Chabotを使ってStash(Bitbucket Server)にPushしたときに通知が来るようにする

Pocket

Chabotを使ってみることにする。
本家だとGithubへのPushだったので、Stash(Bitbuckt Server)にPushするパターンを試してみる。

nodejsのインストール

適当なサーバーにnodejsを入れる。

# rpm -ivh http://ftp.iij.ad.jp/pub/linux/fedora/epel/7/x86_64/e/epel-release-7-5.noarch.rpm
# yum -y install nodejs npm --enablerepo=epel
# npm -v
3.5.2

## npmのバージョンが低すぎたら上げておく
# npm install -g inherits
# npm install -g npm

chabotのインストール

# npm install -g chabot
# chabot create cwbot -d ~/ -f

herokuにPushする

botの実行先はherokuにする。

事前にgitとrubyはインストール済み。

# cd cwbot/
# wget -O- https://toolbelt.heroku.com/install.sh | sh
# heroku login
# heroku create
# git init
# heroku git:remote -a floating-everglades-xxxx

本家のchabotはそのままでは動かないので、
本家のpull requestを反映させる必要がある。

それを反映してStash用のtemplateを追加したのがこれ。

herokuのhostnameとChatWorkのtokenと通知先のルームIDを入れる。

# vi config.json
{
    "port": 5000,
    "bots": {
        "stash": {
            "hostname": "hogehoge.com",
            "token": "YOUR_TOKEN",
            "route": "/stash/hooks/:roomid"
        }
    }
}
# git add .
# git commit -m "cwbot first commit"
# git push heroku master
# heroku logs

https://floating-everglades-xxxx.heroku.com/stash/hooks/:roomid

をStashのPost-Receive WebHooksに登録

通知確認

StashのgitリポジトリにPushしてみると、以下のような通知が来る。
stash2chatwork

どのbranchにpushしたかまでは出してない。
そこまで出したかったら、下記のpayloadを参考にテンプレートをいじってみてね。

herokuではなく自前で動かす場合

# npm install -g forever
# forever start app.js
# lsof -i:5000
# vi /etc/nginx/conf.d/nodejs.conf
upstream backend_node {
    ip_hash;
    server 127.0.0.1:5000;
}

server {
    listen       80;
    server_name  xxx.xx.xx.xxx;
    root /usr/local/chabot;

    charset utf-8;
    access_log /var/log/nginx/access_chabot.log main;
    error_log /var/log/nginx/error_chabot.log;

    location / {
            proxy_pass http://backend_node;
    }
}

# vi /etc/nginx/nginx.conf
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header Host $http_host;
    proxy_set_header X-NginX-Proxy true;
    proxy_redirect off;

# /etc/init.d/nginx reload

http://xxx.xx.xx.xxx/stash/hooks/:roomid

をStashのPost-Receive WebHooksに登録

Pocket


So, what do you think ?