はじめに
DiscordはGitHubからのWebhookには対応していますが、GitLabからのWebhookには対応していません。
そこで、Google Spreadsheet を簡易 Webサーバーとして動かして、手軽にWebHookを受け取る方法を参考に、GitLabからのWebhookをGoogle Spread Sheetでいったん受け取り、Discordに対応した形に整形してからPOSTする、ということをやってみました。
できたこと
GitLabのJob events
をトリガーにこんな感じでDiscordにメッセージを送信できました。ここでは、とりあえずジョブの名前とステータスだけ表示させていますが、もちろん他の情報も表示させることはできます。
中継サーバとなるGoogle Spread Sheetを準備する
ここの内容はほとんどGoogle Spreadsheet を簡易 Webサーバーとして動かして、手軽にWebHookを受け取る方法にあるとおりです。詳しくはこちらの記事をご参照ください。
Google Spread Sheetに空のシートを作る
http://spreadsheet.google.com にアクセスして空のシートを作ってください。
スクリプトエディタを開く
「ツール」-「スクリプト エディタ」を選んでスクリプトエディタを開いてください。
doPost()関数の用意
以下のようにスクリプトを記述します。
function doPost(e) {
if (e == null || e.postData == null || e.postData.contents == null) {
return;
}
var requestJSON = e.postData.contents;
var requestObj = JSON.parse(requestJSON);
date = new Date();
mimeType = e.type;
var payload = {
"content": "```\n" + "name: " + requestObj["build_name"] + "\n" + "status: " + requestObj["build_status"] + "```"
};
var options = {
"method": "post",
"contentType": "application/json",
"payload": JSON.stringify(payload)
};
var url = "DsicordのWebhook URL"
UrlFetchApp.fetch(url, options);
}
var url = "DsicordのWebhook URL"
のところはあとで説明します。
他のイベントやRequest bodyに関する情報はGitLabの公式ページよりご確認ください。
object_kind
に応じて場合分けすれば、Job Events
以外のイベントをトリガーにできるかと思います。
また、Discordに送信したい内容に応じて、payload
のcontent
を加工してください。
Discord側の仕様としては、とりあえずcontent
内にメッセージを突っ込んでおけばよさそうです。
Webアプリとして公開
「公開」メニューから「Webアプリケーションとして導入...」を選んでください。
すると以下のようなダイアログが出てきます。
- 変更内容の説明は適当に
- アプリケーションにアクセスできるユーザーは**全員(匿名ユーザーを含む)**に
変更して導入をクリックしてください。
成功すると、作成したWebアプリのURLが表示されます。
GitLabのWebhook設定
「Settings」-「Integrations」からWebhookの設定をします。
- URLを先ほど表示されたURLに
- Triggerを、トリガーにしたいイベント(今回は
Job events
のみ)に
設定してAdd webhookをクリックしてください。
DiscordのWebhook設定
「サーバー設定」-「Webhooks」からWebhookの設定をします。
Webhookを作成をクリックして、以下のとおりオプション設定をしてください。
- チャンネル:メッセージを投稿するチャンネルの選択
- 名前:メッセージを投稿する際のユーザ名
- WEBHOOK ICON:メッセージを投稿する際のユーザのアバターの編集
順番が前後してしまいますが、WEBHOOK URLを上で作ったスクリプトのvar url = "DsicordのWebhook URL"
のところにペーストしてください。
おわりに
以上でGitLabのJobが走ればDiscordに通知されると思います。
GitLabのWebhookの設定ページからテスト送信ができるので確認してみてください。
GitlabのWebhookを中継してDiscordに送信したいなとは思っていましたが、肝心の中継サーバーをどうするか考えていたらちょうどいいタイミングですばらしい記事を見つけることができました。
それにしてもGoogle Spread Sheetすごいですね。。。