Help us understand the problem. What is going on with this article?

Circle CIでテストにかかる時間を短縮 w/ Jenkins

More than 5 years have passed since last update.

さいきん、Jenkinsのテストが遅い...
specの肥大化...
Jenkinsのインスタンスがm1.small…

などなどは持続可能なCIを目指す上で大きな障壁であります。

じゃ、インスタンスでかくすりゃいいじゃん

という事ができる方、分散rspecやってるぜheheな方はそれで幸せになれると思います。

え、あんまりお金ないし

みたいな仲間は、@camelmasa 先生の記事読むと幸せになります。

プライベートリポジトリを激安にCI出来るCircle CIが凄い。

少し前から、Qiitaの皆さんにオススメしていただいたので検討してはいたのですが、ここまで良いとは思わなかった。

めっさ軽いし、安い

Dashboardからして軽い。
日本に置いているのか先読みしているのか分からないけど、軽い。

1つのプライベートプロジェクトなら$19/moという破格。

実際、早くなったよ

ちゃんと計測してないのですが、10分強かかっていたrake specが、2分弱にまでになりました。早い。

最初のビルドのときはキャッシュがないので、時間がかかりますが、2回目以降は早くなります。

さらに、もうちょっとお金をかけれる方は並列実行してもっと早く出来ます。

ちなみに、標準的なrailsプロジェクトは何も設定を書かずにspecが通りました。すごい。

Jenkins先生はビルド専門に

もともと、

local --[git push]--> Github --[Github Plugin]--> Jenkins --[spec&cap]--> Staging/Production

みたいな感じでした。

ビルドまでhookしています。
本番にまで上がっちゃうってのは賛否両論かと思いますが、
Stagingにデプロイされるってのは悪くないかなと思います。

が、ちょっとJenkins先生の仕事が多すぎたので、Circle CIに負担してもらう形になりました。

local --[git push]--> Github --[Web Hook]--> Circle CI --[Hook]--> Jenkins --[cap]--> Staging/Production

Circle.ymlに設定をかく

今はこんなかんじです。

circle.yml
# SEE: https://circleci.com/docs/config-sample
# Ruby Version List: https://circleci.com/docs/environment#ruby
machine:
  ruby:
    version: 1.9.3-p327

deployment:
  staging:
    branch: develop
    commands:
      - wget --spider -nv http://jenkins_url/git/notifyCommit?url=[git_url]&branches=develop

  production:
    branch: master
    commands:
      - wget --spider -nv http://jenkins_url/git/notifyCommit?url=[git_url]&branches=master

Rubyのバージョンは指定しなくても動きますが、書いておいた方が無難でしょう。裏側はRVMらしいです。

最初は単純なwebhooksの項目にJenkinsのURLを追加していましたが、そうすると失敗してもwebhookが飛んでしまうので困っていました。
素直にdeployment以下に書けば良かったみたいです。
Greenのときだけcommandsが実行されます。

ちなみに、Jenkinsはgit pluginで受け取ると良いと思います。
TOKEN指定のWeb hookでも良いと思いますが、
git pluginの場合、差分が無ければビルドしないで無視してくれるので。

良いですね、とても良いですね。
Circle CIはもっと色々できるみたいなので、
もっとシンプルに出来るかもしれません。

詳しくは公式のドキュメント(英語)をご覧ください。

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away