RailsプロジェクトのCircleCIを1から2にアップデートした話

もうすっかり春の陽気で暖かくなってきました🌸

マネージャー兼エンジニアのkyonsukeです。

CircleCI1.0の終焉

CircleCI2.0が出てだいぶ経ちましたが、先日ついに1.0を切るというアナウンスが流れました🌄

https://circleci.com/blog/sunsetting-1-0/

弊社のプロダクトでもCIとしてCircleCIを使っていたため、慌てて今回アップデートを行いましたので、

そのことについて書きたいと思います。

技術構成

  • Rails 5.1.2
  • Ruby 2.5.0
  • Redis
  • PostgreSQL
  • Webpacker(ただしテストでyarnを使っていない)

成果物

Step1 まずはサンプルをベースに

https://circleci.com/docs/2.0/language-ruby/

大部分はここに書いてあるサンプルコードを拝借しています。

その中でRubyのバージョンを合わせるためにDocker-imageを変えたり(https://circleci.com/docs/2.0/circleci-images/)Redisのイメージを追加したりしています。

CircleCI1.0の時はOverrideする形でコードを記述するので短めですんだのですが、今回は全て記述する方式になったので長めになるのがちょっと気になる点ですね。。。

Step2 Herokuへのデプロイ

これも基本は

https://circleci.com/docs/2.0/deployment-integrations/#heroku

ただ、サンプルにあるのはリリースへのデプロイのみで、このままだとステージング、本番の切り分けが出来ないので、workflowの仕組みを使って、masterにマージされるとステージングに、releaseにマージされると本番にという切り分けをしています。

Step3 繰り返される記述をreferencesにまとめる

CircleCI2ではコマンドをreferencesにまとめることが出来るので、Herokuのデプロイ周りに使うコマンドをまとめてreferencesに書き、deploy_staging、deploy_releaseではそれらコマンドを呼び出すだけですむようにしました。

Yarnにかんして

Yarnに関する記述を今回コメントアウトしていますが、これはyarnを入れるようにしていたときにCircleCI上でyarn installがこけることがあり、弊社のテストではまだyarnを使ったテストはやってないため、一旦コメントアウトしています。

#!/bin/bash -eo pipefail
yarn install --cache-folder ~/.cache/yarn
/bin/bash: yarn: command not found
Exited with code 127

もしこの現象に対して知見がある方がいらっしゃいましたらコメント待ってます。

結果として

CircleCI2.0でDocker-imageを使うように切り替えた影響か、並列化が1.0の時と同じ設定でも、テストだけを行うビルドで1.0のころは5分前後かかっていたのが、4分前後になったため、ここを主目的としては置いていませんでしたが、良い結果となりました👍

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です