Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
CircleCIの実行時間を3分の2くらいにした / CircleCI meetup LT 2...
Search
mstssk
August 23, 2019
Technology
1.5k
2
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
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
340
2016年Android酒部忘年会LT / TechBooster C91 advertising
mstssk
0
270
2015年Android酒部忘年会LT / TechBooster C89 advertising
mstssk
0
280
アプリの通知をLollipop対応しよう / shibuya.apk 2015-05-22 LT
mstssk
2
2.8k
絵文字にまつわるエトセトラ / ABC2014w LT Emojis in Android
mstssk
1
500
Other Decks in Technology
See All in Technology
AI に書かせたその API、 “信頼” できますか?
nagix
0
120
Goodbye ShellScript, Hello File-based App
shunsock
0
220
HHKBエバンジェリストになる方法
941
0
110
ユーザー価値を届け続けるためにウォンテッドリーが大切にしている文化
kotaminato
0
180
AI de Idea
kawaguti
PRO
2
120
30座EKS, 180次升級淬煉的EKS Upgrade Skill 的歷程
eric8230
0
170
技術的負債から考える、AI時代のエンジニアリング投資 — ビズリーチの技術的負債と向き合った経験から、変更し続けられるソフトウェアを考える/ technical-debt-con2026
visional_engineering_and_design
4
3.2k
アプリログインとWeb認証基盤をつなぐ ASWebAuthenticationSession 作法
shimastripe
1
340
aws-iot-platform-architecture-use-cases.pdf
ma2shita
0
310
「ピッケル本」日本語版は4.0(第6版)が出版されるべき / pickaxe4-nagoyark05
kakutani
2
180
beyond jj: config & tools ecosystem
indirect
0
4.4k
EventBridge に「合流」はない ― サーバーレスのワークフローを育てるということ / No Join in EventBridge
yusukeshimizu
2
150
Featured
See All Featured
HU Berlin: Industrial-Strength Natural Language Processing with spaCy and Prodigy
inesmontani
PRO
0
700
Chrome DevTools: State of the Union 2024 - Debugging React & Beyond
addyosmani
10
1.3k
Dominate Local Search Results - an insider guide to GBP, reviews, and Local SEO
greggifford
PRO
0
330
Abbi's Birthday
coloredviolet
4
10k
Money Talks: Using Revenue to Get Sh*t Done
nikkihalliwell
0
500
Are puppies a ranking factor?
jonoalderson
2
3.9k
From π to Pie charts
rasagy
1
370
How STYLIGHT went responsive
nonsquared
100
6.3k
Site-Speed That Sticks
csswizardry
13
1.5k
Balancing Empowerment & Direction
lara
6
1.3k
Faster Mobile Websites
deanohume
310
32k
My Coaching Mixtape
mlcsv
0
320
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もメンテナンスしましょう