3
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.

CIでも可愛い子に叱られたい ~Google Apps Scriptを添えて~

Posted at

最近ちょいちょいと個人的な日曜プロジェクトでCircleCIを導入しているのですが、標準のSlackBOTでは味気がなくただただビルドが失敗したという事実しか通知してくれません。

これは由々しき事態です。
また、Slack以外のChatworkなどの公式対応がないツールや別ツールと連携できるようにWebhookの仕組みとGoogleAppsScript(以下GAS)を使って通知をできるようにします。

SlackのAPI トークンを取得する

まずはSlack APIのページにアクセスしてstart buildを押します。
https://api.slack.com/
サービス名とインストール先を入力します。
Add features and functionality > OAuth & Permissions > Scopesでサービスに対して権限を付与します。
今回はチャンネルにポストするための権限を付与します。
saveしたらInstall App to Workspace を押して対象ワークスペースにアプリケーションを適用します。
インストール後にはOAuth Access Tokenが発行されます。このアクセストークンはSlackにポストする際に使用します。

アイコンなどはここで合わせて設定しましょう。

とりあえずソースコード

GASでは公開ウェブアプリケーションとして公開すると doPost() でPOSTメゾットを扱うことができます。
今回はSlackにPostするにあたって Qiita | Slack BotをGASでいい感じで書くためのライブラリを作った
をお借りしました。

function doPost(e) {
  var json = JSON.parse(e.postData.getDataAsString());
  var msg = ""
  var icon = null
  msg += "circleCIが起動したよ!\n"
  
  if(json.payload.status == "success"){
    msg += ":success_circleci: テストは成功したみたいだよ! \n"
  }else{
    msg += ":failed_circleci: テスト失敗しちゃった… \n"
  }
  msg += "ブランチ名:" + json.payload.branch + "\n" + json.payload.build_url
  postSlackMessage(msg)
}

// メッセージを投げる
function postSlackMessage(msg) {
  var token = Slack Tokenをここにはる";
  var slackApp = SlackApp.create(token); //SlackApp インスタンスの取得
  var options = {
    channelId: "#hoge", //チャンネル名
    userName: "ユニティちゃん", //投稿するbotの名前
    message: msg //投稿するメッセージ
  };
  Logger.log(slackApp.postMessage(options.channelId, options.message, {username: options.userName, icon_url: options.icon_url}));
}


CircleCIのWebhookを追加する

まずはテストが回ったあとにPOSTする先を取得します。
Googleの上部メニューバーの公開>ウェブアプリケーションとして公開を押します。
そうするとモーダルウィンドウでURLとアプリケーションにアクセスできるユーザー、アプリケーション実行するユーザーなどが設定できます。
スクリーンショット 2018-07-01 21.59.02.png

今回はアプリケーションにアクセスできるユーザーは全員にします。
更新を押すとURLが生成されるので控えておきます。

URLを控えたら対象とするプロジェクトの.circleci/config.ymlを開きます。
Yamlの中に以下の文を書きます。

notify:
  webhooks:
    # A list of hook hashes, containing the URL field
    - url: 生成されたGASURL

僕たちが得たもの

スクリーンショット 2018-07-01 22.36.36.png

参考

ライセンス

このコンテンツの一部にユニティちゃんを使用しています
© Unity Technologies Japan/UCL
いつもお世話になってます!

3
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
3
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?