Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
Help us understand the problem. What is going on with this article?

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

More than 1 year has passed since last update.

最近ちょいちょいと個人的な日曜プロジェクトで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の中に以下の文を書きます。

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

僕たちが得たもの

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

参考

ライセンス

このコンテンツの一部にユニティちゃんを使用しています

© Unity Technologies Japan/UCL
いつもお世話になってます!

godan09
都内で働くエンジニア。 WEB系を中心に気になったものに挑戦したりしなかったり。 動画制作などもやってます。
mohikanz
エンジニアのための雑談コミュニティ
https://mohikanz.slack.com
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away