Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
CircleCIの実行時間を3分の2くらいにした / CircleCI meetup LT 2...
Search
mstssk
August 23, 2019
Technology
1.5k
2
Share
CircleCIの実行時間を3分の2くらいにした / CircleCI meetup LT 2019-08-23
https://circleci.connpass.com/event/140666/
mstssk
August 23, 2019
More Decks by mstssk
See All by mstssk
2017/05/29 CA.apk I/O報告会 LT
mstssk
0
330
2016年Android酒部忘年会LT / TechBooster C91 advertising
mstssk
0
260
2015年Android酒部忘年会LT / TechBooster C89 advertising
mstssk
0
280
アプリの通知をLollipop対応しよう / shibuya.apk 2015-05-22 LT
mstssk
2
2.7k
絵文字にまつわるエトセトラ / ABC2014w LT Emojis in Android
mstssk
1
500
Other Decks in Technology
See All in Technology
Datadog 認定試験の概要と対策
uechishingo
0
220
Generative UI × A2UI で AI エージェントを作った話 AI-DLC も使ってみた!
kmiya84377
1
310
AI活用を推進するために ファインディが下した、一つの小さな決断
starfish719
0
150
AI駆動開発でなんでもハンズオン環境をつくってみた
yoshimi0227
0
190
GoとSIMDとWasmの今。
askua
3
460
脅威をエンジニアリングの糧にして:恐怖を乗り越えた先にあったもの / Turn threats into fuel for engineering: what lay beyond overcoming fear
nrslib
1
370
もりもり新機能を一挙紹介! AgentCoreに入門して、AWS上にAIエージェントを構築しよう
minorun365
PRO
6
640
long-running-tasks
cipepser
3
460
チームで実践する AI-DLC 思考の軌跡を残すチェックポイント設計
belongadmin
0
1.4k
速さだけじゃない! VoidZero ツールが移行先に選ばれる理由
mizdra
PRO
6
730
『家族アルバム みてね』における インシデント対応との向き合い方 / Approach incident response in Family Album
kohbis
2
290
AI Adaptable なテストを整える工夫 / Ways to Make Your Tests AI-Adaptable
bitkey
PRO
2
200
Featured
See All Featured
XXLCSS - How to scale CSS and keep your sanity
sugarenia
250
1.3M
Automating Front-end Workflow
addyosmani
1370
210k
The Illustrated Guide to Node.js - THAT Conference 2024
reverentgeek
1
370
Side Projects
sachag
455
43k
Navigating Weather and Climate Data
rabernat
0
210
The Myth of the Modular Monolith - Day 2 Keynote - Rails World 2024
eileencodes
28
3.5k
Statistics for Hackers
jakevdp
799
230k
Design in an AI World
tapps
1
220
More Than Pixels: Becoming A User Experience Designer
marktimemedia
3
430
4 Signs Your Business is Dying
shpigford
187
22k
10 Git Anti Patterns You Should be Aware of
lemiorhan
PRO
659
62k
The Cult of Friendly URLs
andyhume
79
6.9k
Transcript
CircleCIの実行時間を 3分の2くらいにした mstssk
自己紹介 • りんご @mstssk • 株式会社Viibar所属 • フロントエンドエンジニア • CIとか細かい環境改善とか大好き
今日は半分くらいはCircleCIと直接は関係ない話です
CircleCIの実行時間が遅かった!! • システム構成:Rails+Webpack(TypeScript+Vue) ◦ Sprocketsの画面もかなりある • コミット毎のWorkflowの実行時間が15〜20分強 • 積極的にはメンテされておらず、流石に遅かった
• およそ半年の間に、機能追加などもしつつ色々メンテしていき 現在は 10分程度 まで高速化!
Performanceプランにしよう(ダイレクトマーケティング • 旧プラン: $350/month ◦ 1 Free + 7 Paid
Containers ◦ 4並列ジョブ×2を動かせるように • Performance プラン: $180/month ◦ $120(8 Users) + $60 Credit ◦ (実質)無限コンテナ。コストを気にせず並列化できる
Amazon ECRのリージョンを気をつけよう • CIで使うDockerイメージを自前でビルドしてECRに置いてる • Spin up Environment だけで1分半くらいかかってた ◦
というかECRの転送コストが妙にかかってる ◦ 東京リージョン(ap-northeast-1)に置いていたので CircleCIが海を越えてイメージを取りに来ていた • リージョンを us-east-1 にしたら30秒に高速化&省コスト化
TypeScriptのビルド高速化 • ECR早くなったが、別途やってた機能追加で画面数が増えて Webpackビルドだけで5分くらいかかるようになってた • speed-measure-webpack-plugin でボトルネックを計測 ◦ ほとんどが ts-loader
+ vue-loader の実行時間 • fork-ts-checker-webpack-plugin でTSビルドを並列化 ◦ node_modulesディレクトリのexcludeも忘れてた ◦ 5分強が → 30秒に
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もキャッシュ
テストの並列実行の速度に一喜一憂しない • circleci tests split でRSpecを4分割し並列実行している ◦ タイミングデータに基づいた分割をしている ◦ テストを変えるとタイミングデータも変わってしまうので
実行時間も2〜3分くらい変わったりする⏰ ◦ 頑張ってチューニングべきところではなさそう • 他の恒常的に改善できる場所に目を向けよう
その他に気を使ったところ • Chromeは最新に。v71あたりはテストが不安定だった • サーバとフロントのビルド・テストは別ジョブにして並列化 • キャッシュをたまにクリアする/キャッシュ対象自体の整理 ◦ 地味に少しずつキャッシュにゴミが溜まっていったりする ◦
数百MBくらいになってくるとレストアが遅い • 依存関係を時々整理しよう ◦ 機能を落とした時に不要になったものを消し忘れてたり
CIはメンテナンスするもの • 最近は実行時間の最頻値が10分20秒くらいに落ち着いている • しかし、プロダクトの成長と共にコードベースも変わっていくので CIの実行時間は劣化していく •
コードをメンテするように、 CIもメンテナンスしましょう