LoginSignup
4
4

More than 5 years have passed since last update.

CircleCIでトピックブランチのビルドは失敗/復旧時だけ通知、デプロイするブランチのビルドは全通知する

Last updated at Posted at 2016-07-30

概要

circleciの設定で、失敗/復旧時だけビルド結果をslackに通知することができる。程よい通知量になってとてもよいが、 デプロイ時の通知は毎回来て欲しい。
設定だけだと、両立させるのが難しそうだったので、Google Apps Scriptで動くAPIを書いた。

前提

コード

Circle CIのビルド結果をHubotで通知 を参考にGoogle Apps Script上で動くようにした。

GAS上で以下スクリプトをWebAPI公開する
スクリプトのプロパティ「token」にslackのAPIトークを設定


function postMessage(room, message) {
  var prop = PropertiesService.getScriptProperties().getProperties();

  //slackApp インスタンスの取得
  var slackApp = SlackApp.create(prop.token);
  var channels = slackApp.channelsList().channels;
  var channelId = 0;
  for(var i = 0; i < channels.length; i++) {
    if(channels[i].name == room) {
      channelId = channels[i].id;
      break;
    }
  }

  //投稿
  slackApp.postMessage(channelId, message, {
    username : "circleci"
  });
}

function doPost(e) {
  var room = e.parameter.room
  var req = JSON.parse(e.postData.contents);

  var status    = req.payload.status;
  var subject   = req.payload.subject;
  var build_url = req.payload.build_url;
  var branch    = req.payload.branch;
  var reponame  = req.payload.reponame;
  var username  = req.payload.username;

  var deploy_branch = {"master":1,"develop":1};

  var header = (status == 'failed')?':no_good:':':ok_hand:';

  var message = [
    [header,"[",status.toUpperCase(),"]", subject, "["+username+"/"+reponame+"#"+branch+"]"].join(" "),
    build_url
  ].join('\n');

  if(branch in deploy_branch) {
    postMessage(room, message);
  }else {
    if(status == "failed" || status == "fixed") postMessage(room, message); 
  }
}

circle.ymlのwebhookに公開したAPIを指定する。

machine:
  timezone:
    Asia/Tokyo
  ruby:
    version: 2.2.3
dependencies:
  cache_directories:
    - "vendor/bundle"
  override:
    - bundle -j4 --path=vendor/bundle

test:
  override:
    - bundle exec rake test
deployment:
  staging:
    branch: develop
    commands:
      - sh script/deploy-staging.sh
  production:
    branch: master
    commands:
      - sh script/deploy-production.sh
notify:
  webhooks:
    - url: https://script.google.com/macros/s/{公開したAPIのID}/exec?room={部屋の名前}
4
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
4
4