#Update
2015/11/19 から /auth/github へアクセスできなくなっているため、サポートに連絡する必要あり...orz
Travis CI Status - /auth/github disabled due to continued DDoS
https://www.traviscistatus.com/incidents/bntk781kb8y8
はじめに
Travis CI は Github への 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 した値) を入れておく。