atskimura-memo

あまり仕事とは関係なく適当に書きます。開発ネタが多いかもしれません。

Githubのプライベートリポジトリ1つ無料のCIサービス「Shippable」を使ってみた

プライベートリポジトリ無料のCIサービス「Magnum CI」を使ってみた」の通り、Magnum CIはビルドログがネットに公開されちゃうので断念しました。

次に無料でGithubのプライベートリポジトリを使えるCIサービスとして、「Shippable」を試します。

※他のCIサービスをお探しの方はこちらをどうぞ→「CI(継続的インテグレーション)サービスまとめ・14個!

f:id:a_kimura:20140206171142j:plain

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ログインすると、「プライベートリポジトリ使う?」って聞いてきます。

f:id:a_kimura:20140305203756j:plain

「使う!」ってすると、プライベートリポジトリへのアクセス権限を要求してきます。嫌な人はやめましょう。

f:id:a_kimura:20140305203912j:plain

ノードのOSを選択します。UbuntuとWindowsが選べるのですが、なぜかデフォルトはWindowsです。
Ubuntuにします。

f:id:a_kimura:20140305204610j:plain

ダッシュボード画面が表示されます。左の「Create a new job」からジョブを作っていきます。

f:id:a_kimura:20140305204649j:plain

リポジトリ一覧が表示されるので選択します。

f:id:a_kimura:20140305204836j:plain

ブランチを選択します。
どのブランチにpushしてもビルドするという設定はできないようです。ブランチごとにジョブを作成する必要があります。

f:id:a_kimura:20140305204907j:plain

ジョブが作成できました。

f:id:a_kimura:20140305213151j:plain

このタイミングでGithubの方にweb hook、Deploy Keyが自動で設定されています。なんだかちょっとどきどきします。

f:id:a_kimura:20140305212521j:plain

最初は真ん中の再生ボタンを押して手動実行すると、
動いた!

f:id:a_kimura:20140305214359j:plain

テストレポートも見れます。

f:id:a_kimura:20140305220131j:plain

カバレッジレポートも見れます。

f:id:a_kimura:20140305220455j:plain

当然実行結果はメールで通知されますが、メール以外はまだCampfireにしか通知できないようです。

終わりに

ちゃんとGithubのプライベートリポジトリでCIするなら、日本人ユーザも多いし、お金払ってCircleCI使うといいと思います。1リポジトリ月19ドル、10リポジトリで月49ドルです。

仕事のプロジェクトでCIを導入してみたいんだけど、いくら安くても予算取るの面倒なんだよって人の最初のお試しとしてShippableはいいかもしれません。

Github以外が使いたいよって人はこちらをどうぞ→「CI(継続的インテグレーション)サービスまとめ・14個!


Shippable