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 2019-08-23
Search
mstssk
August 23, 2019
Technology
2
1.3k
CircleCIの実行時間を3分の2くらいにした / CircleCI meetup LT 2019-08-23
https://circleci.connpass.com/event/140666/
mstssk
August 23, 2019
Tweet
Share
More Decks by mstssk
See All by mstssk
2017/05/29 CA.apk I/O報告会 LT
mstssk
0
280
2016年Android酒部忘年会LT / TechBooster C91 advertising
mstssk
0
190
2015年Android酒部忘年会LT / TechBooster C89 advertising
mstssk
0
210
アプリの通知をLollipop対応しよう / shibuya.apk 2015-05-22 LT
mstssk
2
2.5k
絵文字にまつわるエトセトラ / ABC2014w LT Emojis in Android
mstssk
1
430
Other Decks in Technology
See All in Technology
「手動オペレーションに定評がある」と言われた私が心がけていること / phpcon_odawara2024
blue_goheimochi
1
310
Hands-on / Kaname Frusawa / Cloud Compare Users Meetup 2024 at University of Tokyo on April 17
paraworld
2
470
シン・Kafka / shin-kafka
oracle4engineer
PRO
6
2.7k
Tableau事例紹介 / Tableau Case Study of Eureka
kazuya_araki_tokyo
1
170
SPI原点回帰論:事業課題とFour Keysの結節点を見出す実践的ソフトウェアプロセス改善 / DevOpsDays Tokyo 2024
visional_engineering_and_design
4
1.3k
**強い**エンジニアのなり方 - フィードバックサイクルを勝ち取る / grow one day each day
soudai
60
17k
日本におけるデータエンジニアリングのこれまでとこれから
foursue
9
1.9k
少数チームで挑む: SwiftUI, TCA, KMPを用いた 新規動画配信アプリ 「ABEMA Live」の開発について
tomu28
0
520
「共通基盤」を超えよ! 今、Platform Engineeringに取り組むべき理由
jacopen
25
5.7k
コンテナセキュリティの基本と脅威への対策
kyohmizu
3
660
"好き"との生活/Regularly update profile with GitHub Actions
judeeeee
0
140
開発生産性向上サービスを作るFindyが自分たちで開発生産性を爆上げした組織づくりの歩み / Findy's path to boosting its own development productivity 2024-04-17
ma3tk
0
220
Featured
See All Featured
Designing with Data
zakiwarfel
95
4.8k
Pencils Down: Stop Designing & Start Developing
hursman
116
11k
Templates, Plugins, & Blocks: Oh My! Creating the theme that thinks of everything
marktimemedia
18
1.7k
Design by the Numbers
sachag
274
18k
Making Projects Easy
brettharned
107
5.5k
Practical Orchestrator
shlominoach
181
9.7k
What the flash - Photography Introduction
edds
64
11k
We Have a Design System, Now What?
morganepeng
42
6.7k
The Language of Interfaces
destraynor
151
23k
Rebuilding a faster, lazier Slack
samanthasiow
72
8.2k
Building Your Own Lightsaber
phodgson
97
5.7k
Being A Developer After 40
akosma
56
580k
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もメンテナンスしましょう