Githubのプライベートリポジトリ1つ無料のCIサービス「Shippable」を使ってみた
「プライベートリポジトリ無料のCIサービス「Magnum CI」を使ってみた」の通り、Magnum CIはビルドログがネットに公開されちゃうので断念しました。
次に無料でGithubのプライベートリポジトリを使えるCIサービスとして、「Shippable」を試します。
※他のCIサービスをお探しの方はこちらをどうぞ→「CI(継続的インテグレーション)サービスまとめ・14個!」
ShippableはGithubしか使えませんが、プライベートリポジトリも使えます。ただし、プライベートリポジトリは1つだけしか使えません。
まだ有償プランはありませんが、「FREE PLAN : Unlimited builds for all open source and one private project!! 」と書かれているので、おそらく1つだけはずっと無料でプライベートリポジトリを使えると思います。(Pricing)
前提
前の記事で説明した通り、対象とするのはRailsアプリなんですが、Gitリポジトリ=Railsアプリではなくて、以下のようにrailsディレクトリがRAILS_HOMEになっているリポジトリです。
repo_home ├── xxx ├── yyy └── rails
Shippableの使い方
shippable.ymlなどの設定
shippable.yml
がないと途中で怒られてジョブが作れないので、先にshippable.yml
を作成してpushします。
Shippableは画面上でビルドスクリプトを設定するような機能がありません。
なのでビルドスクリプトを作るのはけっこう面倒で、ブランチを作って、shippable.ymlを修正して、pushして、自動ビルド。うまくいかなかったら、修正→push→自動ビルドの繰り返しです。そしてビルドのたびにbundle installするからビルドは4分くらいかかる。面倒です。ちゃんと動いたら、最後にmasterにマージという感じですね。
Shippableはテストレポートの表示にci_reporterが必要、カバレッジのレポートはsimplecov, simplecov-csvで出しておくと見やすく表示してくれますので、Gemfile
に追加します。
group :test do gem "ci_reporter" gem "simplecov" gem "simplecov-csv" end
Rakefileにci_reporterの設定を追加します。
require 'ci/reporter/rake/rspec'
spec_helper.rbにsimplecovの設定をします。
sporkを使っているんですが、以下のようにしたらうまく動きました。(参考)
def init_simplecov require 'simplecov' if ENV["COVERAGE_REPORTS"] # for Sippable require 'simplecov-csv' SimpleCov.formatter = SimpleCov::Formatter::CSVFormatter SimpleCov.coverage_dir(ENV["COVERAGE_REPORTS"]) end SimpleCov.start 'rails' end Spork.prefork do # Loading more in this block will cause your tests to run faster. However, # if you change any configuration or code from libraries loaded here, you'll # need to restart spork for it take effect. unless ENV['DRB'] init_simplecov end end Spork.each_run do # This code will be run each time you run your specs. if ENV['DRB'] init_simplecov end end
最後にshippable.yml
を以下のように設定します。
shippable.yml
はGitリポジトリ直下に置きます。
環境変数CI_REPORTS
に<Gitリポジトリ>/shippable/testresults
を、COVERAGE_REPORTS
に<Gitリポジトリ>/shippable/testresults
を指定します。これは決まりです。
今回はRAILS_HOMEが一階層下なので、普通のRailsアプリの場合は、公式サンプル(Shippable/Ruby-buildsample)を見ると良いです。
language: ruby rvm: - "2.1.0" env: - CI_REPORTS=../shippable/testresults COVERAGE_REPORTS=../shippable/codecoverage before_install: install: - cd rails - pwd - bundle install --path=vendor/bundle before_script: - cd rails - bundle exec rake db:create - bundle exec rake db:schema:load script: - cd rails - bundle exec rake ci:setup:rspec spec
ログインからジョブの作成
Githubログインすると、「プライベートリポジトリ使う?」って聞いてきます。
「使う!」ってすると、プライベートリポジトリへのアクセス権限を要求してきます。嫌な人はやめましょう。
ノードのOSを選択します。UbuntuとWindowsが選べるのですが、なぜかデフォルトはWindowsです。
Ubuntuにします。
ダッシュボード画面が表示されます。左の「Create a new job」からジョブを作っていきます。
リポジトリ一覧が表示されるので選択します。
ブランチを選択します。
どのブランチにpushしてもビルドするという設定はできないようです。ブランチごとにジョブを作成する必要があります。
ジョブが作成できました。
このタイミングでGithubの方にweb hook、Deploy Keyが自動で設定されています。なんだかちょっとどきどきします。
最初は真ん中の再生ボタンを押して手動実行すると、
動いた!
テストレポートも見れます。
カバレッジレポートも見れます。
当然実行結果はメールで通知されますが、メール以外はまだCampfireにしか通知できないようです。
終わりに
ちゃんとGithubのプライベートリポジトリでCIするなら、日本人ユーザも多いし、お金払ってCircleCI使うといいと思います。1リポジトリ月19ドル、10リポジトリで月49ドルです。
仕事のプロジェクトでCIを導入してみたいんだけど、いくら安くても予算取るの面倒なんだよって人の最初のお試しとしてShippableはいいかもしれません。
Github以外が使いたいよって人はこちらをどうぞ→「CI(継続的インテグレーション)サービスまとめ・14個!」