BitbucketのwebhookをGASで取得してチャットツールに投稿する
概要
SlackだとBitbucketのあれこれを通知してくれる便利な拡張機能があるそうですが、
Twistにはそういった拡張機能が無いようなので自作してみました。
webhookの受け口はサーバーレスで費用のかからないGASで実装することに。
このようなイメージです。
Bitbucket -> webhook -> GAS -> twistAPI
※ Bitbucketのwebhook取得について、LIGさんのこちらの記事を参考にさせていただきました。
Bitbucketにpushしたらチャットワークに通知できるようにしてみよう
GAS (Google Apps Script)
まずは受け口のGASを構築。
doPost()という名前で関数を作っておくことでPOSTを受け付けた際に実行されるようです。
せっかくGASで実装しているのでスプレッドシートと連携して簡易的なログ吐き出しもしてみました。
function doPost(e) {
var post_data = JSON.parse(e.postData.contents);
var push = post_data.push.changes[0];
var repository_name = post_data.repository.name;
var branch_name = push['new']['name'];
var user = push['new']['target']['author']['user']['display_name'];
var url = push['new']['target']['links']['html']['href'];
var message = push['new']['target']['message'];
// 取得した内容を元に各種WEBサービスへ送信
// 今回はtwistのスレッドに投稿
var content = url + "\n" + user + " " + message.replace("\n\n","\n");
addCommentToTwist(9999,content);
// シートにログに吐き出し
var spreadsheet = SpreadsheetApp.getActiveSpreadsheet();
var sheet = spreadsheet.getActiveSheet();
var debug_flg = sheet.getRange(1,2).getValue();
if(debug_flg == 1){
sheet.appendRow([repository_name,branch_name,post_data,push]);
}
}
// twistに投稿する関数
function addCommentToTwist(thread_id,content) {
var url = "https://api.twist.com/api/v3/comments/add";
var apiKey = "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx";
var idAdmin = true;
var recipients = [];
var headers = {
"Authorization": apiKey,
"Accept": "application/json",
"Content-type": "application/json"
};
var payload = {
"thread_id":thread_id,
"send_as_integration":idAdmin,
"recipients":recipients,
"content":content
};
var options = {
"method": "post",
"payload": JSON.stringify(payload),
"headers": headers
};
var response = UrlFetchApp.fetch(url, options);
}
コードを書いたら以下の手順でURLを取得します。
公開 -> ウェブアプリケーションとして導入 -> 更新
プロジェクトバージョンはNewを選択しないとコードの変更が反映されません。
GASの地味に勝手が悪い仕様なので注意。
Bitbucket
続いてBitbucketのWebhooksに先ほど取得したGASのURLを登録します。
設定 -> Webhooks -> Add webhook
結果
以上で準備が完了です。
実際にコミットしてみると・・・
無事、twistに投稿できました!
デバッグモードもきちんと動いています。
シート内でフラグのON,OFFができるので、ビルド(Newバージョンで公開)の必要がありません。
所感
リポジトリやブランチ名が取得できたので、投稿するスレッドを切り分けもできそう。
ハードコーディングではなくて、スプレッドシートでマッピングを設定できたら便利ですね。
ちょっとした小物を作るのにGASはとっても便利。今後も色々勉強していきたいと思います。
Author And Source
この問題について(BitbucketのwebhookをGASで取得してチャットツールに投稿する), 我々は、より多くの情報をここで見つけました https://qiita.com/knaito27/items/5c8266882abc20648ba8著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .