この記事は最終更新から1年以上経過しています。 気をつけてね。
Travis-CIはビルド実行ツール。コードのリポジトリと連携して色々自動でやらせます。
さて、Travis-CIはGithubなどと連携して、リビジョン毎にBuildするのが一般的です。
でも定期的にBuild走らせるのもありかなと、herokuのスケジューラと組み合わせて叩いてみます。
よそのBashをテストするスクリプト
とりあえずなんでもいいんですが、ChefのOmunibus InstallerのSyntaxチェックをするスクリプトでも作ってGithubに公開します。
#!/usr/bin/env bash
curl -s -L https://www.getchef.com/chef/install.sh | bash -n && echo 'syntax OK'
要はリポジトリのリビジョンに関係ない外部の何かをチェックするタスクです。
.travis.yml
はこんな感じ。デフォルトではrubyを用意してくれるけど気にしない。
script: "./test.sh"
これをTravis,ciに登録します。
しました。
Travis-CIのRubyライブラリで最終のビルドをリスタートする
そしたらTravis-CIのAPIを叩く準備をします。
Rubyのライブラリがあったので使いましょう。
ライブラリを使って、最新のビルドをリスタートするRakeタスクを作りました。
require 'bundler/setup'
require 'travis'
desc 'call travis to build restart'
task :default do
Travis.access_token = ENV['TRAVIS_TOKEN']
build = Travis::Repository.find(ENV['TRAVIS_BUILD'])
build.last_build.restart
end
task :default do
からend
までがリスタートの処理です。使いやすくていいですね。
このタスクを実行すると、最新のビルドがリスタートします。
UIから見てると分かりやすい。
ここのRakeタスクはherokuに叩かせるので、Gitリポジトリにします。ついでにGithubへもPush。
herokuのスケジューラに継続的に実行させる
実行するタスクがデキたので、herokuにコードを持って行きましょう。
新規アプリの作成
herokuコマンドでちょいちょいとアプリケーションを登録しました。
$ heroku apps:create travis-bash-sample
Creating travis-bash-sample... done, stack is cedar
http://travis-bash-sample.herokuapp.com/ | git@heroku.com:travis-bash-sample.git
ではRakefileをherokuに置きます。
$ git remote add heroku git@heroku.com:travis-bash-sample.git
$ git push heroku
Initializing repository, done.
Counting objects: 6, done.
Delta compression using up to 4 threads.
Compressing objects: 100% (5/5), done.
Writing objects: 100% (6/6), 1.12 KiB | 0 bytes/s, done.
Total 6 (delta 0), reused 0 (delta 0)
-----> Ruby app detected
-----> Compiling Ruby
# -- 以下略
はいご苦労さん。
じゃあheroku config
で必要な環境変数を登録して、rakeを実行してみましょう。
Rakeタスクをherokuで実行(おためし)
$ heroku config:add TRAVIS_TOKEN="YOUR_TOKEN"
$ heroku config:add TRAVIS_BUILD="OpsRockin/travis_bash_sample"
$ heroku run rake
Running `rake` attached to terminal... up, run.7639
Travis-CIのUIを眺めていると、Buildがリスタートしました。OKね。
herokuのスケジューラアドオンを作成
herokuはアドオンにスケジューラを持っているので、定期的にrakeコマンドを叩いてもらいます。
heroku addons
でアプリにスケジューラを追加します。
$ heroku addons:add scheduler:standard
Adding scheduler:standard on travis-bash-sample... done, v5 (free)
This add-on consumes dyno hours, which could impact your monthly bill. To learn more:
http://devcenter.heroku.com/addons_with_dyno_hour_usage
To manage scheduled jobs run:
heroku addons:open scheduler
Use `heroku addons:docs scheduler` to view documentation.
追加できたので、Jobの編集画面を開きます。
$ heroku addons:open scheduler
Opening scheduler:standard for travis-bash-sample... done
ブラウザで開くので、実行するコマンドとスケジュールを登録。
1時間に一回でいいかな。
これで指定したスケジュールでTravis-CIの最終ビルドが再実行されます。
スケジューラの実行状況を確認する
スケジューラホンマに動いてんの?って思うならログを見てもいいです。
$ heroku logs --ps scheduler
2013-12-15T07:27:38.479645+00:00 heroku[scheduler.1943]: Starting process with command `bundle exec rake`
2013-12-15T07:27:44.896760+00:00 heroku[scheduler.1943]: Process exited with status 0
2013-12-15T07:27:44.916523+00:00 heroku[scheduler.1943]: State changed from up to complete
2013-12-15T07:27:39.142666+00:00 heroku[scheduler.1943]: State changed from starting to up
2013-12-15T07:36:32.726247+00:00 heroku[scheduler.8651]: Starting process with command `bundle exec rake`
2013-12-15T07:36:33.395186+00:00 heroku[scheduler.8651]: State changed from starting to up
2013-12-15T07:36:40.094286+00:00 heroku[scheduler.8651]: Process exited with status 0
2013-12-15T07:36:40.100911+00:00 heroku[scheduler.8651]: State changed from up to complete
やってるようだね。
ログの間隔が10分なのは撮影用にチェックしたからです。
おわりに
herokuだけだと通知の仕組みがいる、Travis-CIだけだとスケジュール定期実行はしない。
なら、できることを殿様食いしましょう。