Upgrade to Pro — share decks privately, control downloads, hide ads and more …

CircleCIの実行時間を3分の2くらいにした / CircleCI meetup LT 2019-08-23

mstssk
August 23, 2019

CircleCIの実行時間を3分の2くらいにした / CircleCI meetup LT 2019-08-23

mstssk

August 23, 2019
Tweet

More Decks by mstssk

Other Decks in Technology

Transcript

  1. Performanceプランにしよう(ダイレクトマーケティング • 旧プラン: $350/month
 ◦ 1 Free + 7 Paid

    Containers
 ◦ 4並列ジョブ×2を動かせるように
 • Performance プラン: $180/month
 ◦ $120(8 Users) + $60 Credit
 ◦ (実質)無限コンテナ。コストを気にせず並列化できる

  2. Amazon ECRのリージョンを気をつけよう • CIで使うDockerイメージを自前でビルドしてECRに置いてる
 • Spin up Environment だけで1分半くらいかかってた
 ◦

    というかECRの転送コストが妙にかかってる
 ◦ 東京リージョン(ap-northeast-1)に置いていたので
 CircleCIが海を越えてイメージを取りに来ていた
 • リージョンを us-east-1 にしたら30秒に高速化&省コスト化

  3. TypeScriptのビルド高速化 • ECR早くなったが、別途やってた機能追加で画面数が増えて
 Webpackビルドだけで5分くらいかかるようになってた
 • speed-measure-webpack-plugin でボトルネックを計測
 ◦ ほとんどが ts-loader

    + vue-loader の実行時間
 • fork-ts-checker-webpack-plugin でTSビルドを並列化
 ◦ node_modulesディレクトリのexcludeも忘れてた
 ◦ 5分強が → 30秒に 

  4. Railsのassetsをキャッシュしよう • コントローラのテスト毎にassetsビルドが走って遅い&高負荷
 • ビルド済みassetsフォルダをキャッシュしよう
 • public/assets と tmp/cache/assets をキャッシュ


    - save_cache: key: public-assets-{{ .Environment.CACHE_KEY }}-{{ .Branch }}-{{ .BuildNum }} paths: - public/assets - tmp/cache/assets - ~/.webdrivers # ついでにChromeDriverもキャッシュ
  5. テストの並列実行の速度に一喜一憂しない • circleci tests split でRSpecを4分割し並列実行している
 ◦ タイミングデータに基づいた分割をしている
 ◦ テストを変えるとタイミングデータも変わってしまうので


    実行時間も2〜3分くらい変わったりする⏰
 ◦ 頑張ってチューニングべきところではなさそう
 • 他の恒常的に改善できる場所に目を向けよう