December 1, 2015

ニフティクラウドタイマーを使ってTravis CIで定期的にビルドを実行する

これは、NIFTY Cloud Advent Calendar 2015の1日目の記事です。

ハードルを下げるため、ちょっとしたネタにしました。

Travis CIでGitHubへのpushをトリガーにビルドするのではなく、ビルドを定期的に実行したいときに、ニフティクラウドタイマーを使って実現する方法です。

タイマーって何?という方はニフティクラウドタイマーのご紹介をご参照ください。

簡単に言うと、サーバーなしでcronを使えるサービスです。

前提

  • GitHubのアカウントを持っている
  • GitHubのPersonal settingsでPersonal access tokenを作成済(GITHUB_TOKENとする)
  • Travis CIのアカウントを持っている
  • Travis CIで定期的にビルドしたい何かがある
  • ニフティクラウドのアカウントを持っている

手順

Travis CIのAccess TokenをGitHubのPersonal access tokenから取得する

下記のコマンドを叩いてください。

curl -s -X POST -H 'Content-Type: application/json' -H 'Accept: application/vnd.travis-ci.2+json' https://api.travis-ci.org/auth/github -d '{"github_token":"GITHUB_TOKEN"}'

下記のようなレスポンスが返ってきます。

{"access_token":"TRAVIS_TOKEN"}

TRAVIS_TOKENの部分にTravis CIのAccess Tokenが入っているはずなので、メモしておきます。

Travis CIのAPI認証について、詳しくは公式ドキュメントをご参照ください。

curlで実行してみる

ここで、APIの実行が可能か確認するため、下記のようにcurlでAPIを叩いてみます。

{TRAVIS_TOKEN}に先ほど取得したTravis CIのAccess Tokenを、{ACCOUNT}に自分のアカウント名、{REPOSITORY}に自分のリポジトリ名を入れてください。

成功すると、ビルドが実行されるはずです。

body='{
"request": {
  "branch":"master"
}}'

curl -s -X POST \
  -H "Content-Type: application/json" \
  -H "Accept: application/json" \
  -H "Travis-API-Version: 3" \
  -H "Authorization: token {TRAVIS_TOKEN}" \
  -d "$body" \
  https://api.travis-ci.org/repo/{ACCOUNT}%2F{REPOSITORY}/requests

Travis CIでAPIからのビルドの実行について、詳しくは公式ドキュメントry

ニフティクラウドタイマーに設定する

設定自体は上記でやってみた、HTTPのリクエストを設定するだけです。

以下、手順です。

ニフティクラウドにログインし、左上のメニューから、タイマーを選択します。

travis-ci-with-niftycloud-timer-1 タイマー作成ボタンがあると思いますので、それをクリックします。

タイマー名とスケジュールを設定します。メモも設定できます。

travis-ci-with-niftycloud-timer-2 タイプはHTTPにします。他にはサーバー起動、停止、再起動、削除、設定変更、イメージとして保存、スナップショット取得、MQTT、Fluentdがあります。

travis-ci-with-niftycloud-timer-3 HTTPを選択するとURL、メソッド、ヘッダー、ボディが設定できるようになるので、下記のように設定します。

  • URL
    • https://api.travis-ci.org/repo/{ACCOUNT}%2F{REPOSITORY}/requests
  • メソッド
    • POST
  • ヘッダー
Content-Type: application/json
Accept: application/json
Travis-API-Version: 3
Authorization: token {TRAVIS_TOKEN}
  • ボディ
{
  "request": {
    "branch":"master"
  }}

通知の設定をします。

travis-ci-with-niftycloud-timer-4 確認して、“作成する"をクリックします。

これで、設定は完了です。定期的にビルドが実行されるはずです。

実行の履歴は、作成したタイマーを展開し、実行履歴タブを見ると確認できます。

Travis CIとニフティクラウドタイマーを使って、自動で最新のCoreOSをインポートする

最後に、実際にこの仕組みを使ってCoreOSのインポートを自動化してみた例をご紹介します。

元々Jenkinsを立てて自動でやっていたんですが、タイマーを使うことでサーバーがいらなくなりました。

ソースはGitHubに置いてあるため、それを見てください。

ビルドの様子もTravis CIで見られます。

ほぼエラーになっているのは、新しいバージョンが出て、インポートされたときのみ成功と判定しているためです。

見た目が悪いので改善したいと思っています。

明日、12/02は@thuydgがmBaaSとかMQTT辺りの話を書いてくれる予定です。

© Yuya Kusakabe 2011-2022

Powered by Hugo & Kiss.