8
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

GitLabの通知をWebhookでDiscordに送信する

Last updated at Posted at 2018-03-19

はじめに

DiscordはGitHubからのWebhookには対応していますが、GitLabからのWebhookには対応していません。
そこで、Google Spreadsheet を簡易 Webサーバーとして動かして、手軽にWebHookを受け取る方法を参考に、GitLabからのWebhookをGoogle Spread Sheetでいったん受け取り、Discordに対応した形に整形してからPOSTする、ということをやってみました。

できたこと

GitLabのJob eventsをトリガーにこんな感じでDiscordにメッセージを送信できました。ここでは、とりあえずジョブの名前とステータスだけ表示させていますが、もちろん他の情報も表示させることはできます。

スクリーンショット 2018-03-19 22.34.00.png

中継サーバとなるGoogle Spread Sheetを準備する

ここの内容はほとんどGoogle Spreadsheet を簡易 Webサーバーとして動かして、手軽にWebHookを受け取る方法にあるとおりです。詳しくはこちらの記事をご参照ください。

Google Spread Sheetに空のシートを作る

http://spreadsheet.google.com にアクセスして空のシートを作ってください。

スクリプトエディタを開く

「ツール」-「スクリプト エディタ」を選んでスクリプトエディタを開いてください。

スクリーンショット 2018-03-19 22.46.22.png

doPost()関数の用意

以下のようにスクリプトを記述します。

コード.gs
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に送信したい内容に応じて、payloadcontentを加工してください。

Discord側の仕様としては、とりあえずcontent内にメッセージを突っ込んでおけばよさそうです。

Webアプリとして公開

「公開」メニューから「Webアプリケーションとして導入...」を選んでください。

スクリーンショット 2018-03-19 22.58.06.png

すると以下のようなダイアログが出てきます。

スクリーンショット 2018-03-19 23.00.16.png
  • 変更内容の説明は適当に
  • アプリケーションにアクセスできるユーザーは**全員(匿名ユーザーを含む)**に

変更して導入をクリックしてください。
成功すると、作成したWebアプリのURLが表示されます。

スクリーンショット 2018-03-19 23.02.43.png

GitLabのWebhook設定

「Settings」-「Integrations」からWebhookの設定をします。

スクリーンショット 2018-03-19 23.09.08.png

  • URLを先ほど表示されたURLに
  • Triggerを、トリガーにしたいイベント(今回はJob eventsのみ)に

設定してAdd webhookをクリックしてください。

DiscordのWebhook設定

「サーバー設定」-「Webhooks」からWebhookの設定をします。
スクリーンショット 2018-03-13 22.15.56.png

Webhookを作成をクリックして、以下のとおりオプション設定をしてください。

スクリーンショット 2018-03-19 23.19.30.png

  • チャンネル:メッセージを投稿するチャンネルの選択
  • 名前:メッセージを投稿する際のユーザ名
  • WEBHOOK ICON:メッセージを投稿する際のユーザのアバターの編集

順番が前後してしまいますが、WEBHOOK URLを上で作ったスクリプトのvar url = "DsicordのWebhook URL"のところにペーストしてください。

おわりに

以上でGitLabのJobが走ればDiscordに通知されると思います。
GitLabのWebhookの設定ページからテスト送信ができるので確認してみてください。

GitlabのWebhookを中継してDiscordに送信したいなとは思っていましたが、肝心の中継サーバーをどうするか考えていたらちょうどいいタイミングですばらしい記事を見つけることができました。
それにしてもGoogle Spread Sheetすごいですね。。。

8
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
8
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?