6
4

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.

Dockerhubの自動ビルドの通知をSlackで受けるための一番手軽な方法

Posted at

DockerhubではDockerイメージの自動ビルドとそこからWebhook機能でPOSTリクエストを送信することができます。
しかしjsonの型が違うので、そのリクエストを直にSlackに送信することはできません。

Dockerイメージのビルドが完了したことをSlackに通知するために色々試行錯誤していましたが、結局Google Cloud Functions(もしくはAWS Lambdaなどそれに準ずるもの)を使うのが一番手軽だという結論になりました。

GitHubに変更をプッシュしたら通知を待つだけなので結構便利ですが、あまりやっている人がいないように感じたので紹介したいと思います。

設定方法

Slack Incoming Webhook

  1. Incoming Webhooksを自分のSlackチームに登録します
  2. Webhookを1つ作成します。
    • 設定はすべてデフォルトでOKです。ユーザ名やアイコンも後に作成するリクエストに含めることができます。チャンネルだけ好きなものを設定しましょう。

Google Cloud Functions

  1. Cloud Functionsのページにアクセス
  2. Functionを作成する
  3. 以下のプロパティを入力
    • Trigger: HTTP trigger
    • Source code: 下記コード(先程作成したWebhookのURLを記述してください)
    • Function to execute: sendToSlack
  • index.js
var request = require('request');

exports.sendToSlack = function sendToSlack(req, res) {
  var slack_endpoint = "<WebhookのURL>";
  var repo_name = req.body.repository.repo_name;
  var pusher = req.body.push_data.pusher;
  var desc = "New image was pushed to " + repo_name + " by " + pusher;
  var repo_url = req.body.repository.repo_url;
  var text = desc + "\n" + repo_url;
  var username = "dockerhub";
  var icon_emoji = ":whale:";

  var post_data = {
    "text": text,
    "username": username,
    "icon_emoji": icon_emoji
  };

  var options = {
    uri: slack_endpoint,
    form: JSON.stringify(post_data)
  }

  request.post(options, function (error, response, body) {
      console.log(body)
      if (!error && response.statusCode == 200) {
        res.status(200).send('Success');
      } else {
        res.status(response.statusCode).send('Fail')
      }
    }
  );
};
  • package.json
{
  "name": "sample-http",
  "version": "0.0.1",
  "dependencies": {
    "request": "2.83.0"
  }
}

Dockerhub

  1. DockerhubページのBuild Settingsより、自動ビルドの設定を実施する
  2. Webhooksより、先程作成したFunctionのURLを登録する

使い方

ただ変更をプッシュするだけです。
通知が来るのを待ちましょう。
ちなみに上記のコード通りに設定すると以下のようなメッセージがSlackに送信されます。

dockerhub-slack-integration-sample

アイコンはとりあえずクジラの絵文字を使っていますが、もっとDockerっぽいものにできるような気がします。
興味のある方は設定を変更してもっと格好よくしてみてください。

Google Cloud Fucntionsについてももっと面白い使い方があると思うので模索して見たいと思います。

6
4
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
6
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?