LoginSignup
7
6

More than 5 years have passed since last update.

Travis CI で定期的にビルドする (Google Apps Script を使って)

Last updated at Posted at 2015-09-14

Update

2015/11/19 から /auth/github へアクセスできなくなっているため、サポートに連絡する必要あり...orz

Travis CI Status - /auth/github disabled due to continued DDoS
https://www.traviscistatus.com/incidents/bntk781kb8y8

はじめに

Travis CIGithub への push をトリガーにしてビルドしてくれるのが便利。けど、決まった時間 / 定期的にビルドを実行する機能はない。そこで、Google Apps Script を cron 代わりに使い、 Travis CI API を定期的に呼び出すことで実現した。

前提

  • Github にオープンソースを公開している。
  • Travis CI でビルドしている。

手順

Travis CI API に使う access_token は Travis CI の accounts ページに表示されているものではない。Github の personal access token から生成する必要がある。

Github で Personal access token を作る (github_token)

Personal Access Tokens
https://github.com/settings/tokens

にアクセスして、以下の5つの scope を持つ github_token を作る。生成された github_token はメモしておくこと(メモし忘れたら再生成すればよい)。

  • read:org
  • repo:status
  • repo_deployment
  • user:email
  • write:repo_hook

Google Apps Script を作る

Google Drive で新しい文書を作り、Tools > Script Editor... でスクリプトを作る。

github_token をスクリプト上で記述するのを避けるため、Script property として保存しておく。

Script Editor の File > Project Properties を開き、 Script Properties タブで +Add row して、Property に github_token、Value に作った値を保存する。

Travis CI API で access_token を取得する

以下のスクリプトで github_token から access_token を取得する。

function travisToken() {
  var github_token = PropertiesService.getScriptProperties().getProperty('github_token');
  var url = 'https://api.travis-ci.org/auth/github';
  var params = {
    method: 'post',
    headers: {
      'Accept': 'application/vnd.travis-ci.2+json'
    },
    payload: {"github_token": github_token }
  }
  var request = UrlFetchApp.getRequest(url, params);
  Logger.log(request);
  var response = UrlFetchApp.fetch(url, params);
  Logger.log(response);
  return JSON.parse(response.getContentText()).access_token;
}

Travis CI API でビルドする

以下のスクリプトでビルドする。

function travisToken() {
  var github_token = PropertiesService.getScriptProperties().getProperty('github_token');
  var url = 'https://api.travis-ci.org/auth/github';
  var params = {
    method: 'post',
    headers: {
      'Accept': 'application/vnd.travis-ci.2+json'
    },
    payload: {"github_token": github_token }
  }
  var request = UrlFetchApp.getRequest(url, params);
  Logger.log(request);
  var response = UrlFetchApp.fetch(url, params);
  Logger.log(response);
  return JSON.parse(response.getContentText()).access_token;
}

Google Apps Script を定期実行する

Script Editor の Resources > Current project's triggers で、Run に build を選び、実行したい時間を設定する。

注意点 (はまりどころ)

UrlFetchApp.fetch に渡す params に contentType は設定せず、payload に javascript の object をそのまま記述する。

もし params に contentType : 'application/json' を設定した場合は、payload には String (JSON.stringify した値) を入れておく。

参考

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