15.9K Views
February 20, 24
スライド概要
https://findy.connpass.com/event/309537/
TechBrew in 東京 〜CI/CDパイプライン改善 最適化の取り組み〜
LT登壇スライド
渋谷のWeb系企業で働くエンジニア 最近はテストや自動化関係に興味があります
CI/CDボトルネックの把握とその先へ TechBrew in 東京 〜CI/CDパイプライン改善の取り組み〜 サイボウズ株式会社 開発本部 生産性向上チーム 加瀬 健太(@Kesin11)
自己紹介 ▌加瀬 健太(@Kesin11) ▌経歴 ◼ ~2023/06 株式会社DeNA SWET第二グループ @Kesin11 ◼ 2023/07 サイボウズ株式会社 生産性向上チーム @Kesin11 ▌業務 ◼ Github Actionsセルフホストランナーの運用など ▌日課はgithub.blog/changelogを見ること @kesin11.bsky.social
Productivity Weekly ▌「1週間の間に発見された開発者の 生産性向上に関するネタを共有する 会」を社内で開催した内容をzennで 公開 ▌100回を突破して現在140回! ▌CI/CD関連のネタが多いのでぜひ
CI/CDの最適化について 最適化のメタな話をします
目次 ▌最適化で抑えるべきポイント ▌CI/CDの分析 ▌Kesin11/actions-timelineの紹介 ▌actions-timelineのその先へ
最適化で抑えるべきポイント
最適化で抑えるべきポイント ▌推測するな、計測せよ ▌クリティカルパスから最適化 ▌まずはキャッシュ。話はそれから ◼ 今回はスキップ
推測するな、計測せよ
推測するな、計測せよ ▌ボトルネックを正しく把握するのが先 ◼ 意外なところに時間がかかっている可能性がある ▌例:アーティファクトのアップロードに数分かかっているケースなど ◼ actions/upload-artifact@v3に時間が意外とかかる ◼ ファイルサイズが数百MBの大きさになると数分のオーダーで時間がかかる ◼ v4で高速化された(2023/12/14リリース)
推測するな、計測せよ CI/CDのボトルネックを把握できていますか?BigQueryでビルド情報ダッシュボードを構築した話 CI/CD Conference 2021 加瀬健太 @Kesin11
クリティカルパスから最適化
ありがちなパターン1 セットアップ処理、ビルド テスト shard1 テスト shard2 テスト shard3 トータル10分 ▌並列の前の直列部分に時間がかかっている ▌まずセットアップ処理・ビルドを高速化したり並列化できないかを検討するべき
ありがちなパターン1 セットアップ処理、ビルド テスト shard1 テスト shard2 テスト shard3 トータル10分->7分に改善! ▌並列の前の直列部分に時間がかかっている ▌まずセットアップ処理・ビルドを高速化したり並列化できないかを検討するべき
ありがちなパターン2 セットアップ処理、ビルド テスト shard1 テスト shard2 テスト shard3 ▌ 並列化した一部のshardに時間が偏っている ▌ テスト shard3を短縮するべき ◼ テストのshard分割を工夫して平準化するなど トータル10分
ありがちなパターン2 セットアップ処理、ビルド テスト shard1 テスト shard2 テスト shard1 テスト shard1 テスト shard3 ▌ 並列化した一部のshardに時間が偏っている ▌ テスト shard3を短縮するべき ◼ テストのshard分割を工夫して平準化するなど トータル10分->7分に改善!
クリティカルパス以外を最適化しても意味がない ▌一部を速くしてもトータル時間が短くならないならほぼ意味がない ▌まずはクリティカルパスを把握することが大事 ▌基本的に時間がかかってる部分の方が改善の余地が大きい セットアップ処理、ビルド テスト shard1 テスト shard2 テスト shard3 クリティカルパス
どうやって全体を分析するか
CI/CDの分析 ▌利用しているサービスに組み込まれているならそれを使うべき ▌CircleCIはInsightでワークフロー、ジョブ、テストの分析が可能 ▌Azure Pipelinesにも同様の機能が存在する ▌GitHub Actionsには無い
無いなら自作するしかない Kesin11/actions-timeline
Kesin11/actions-timeline ▌ワークフロー全体を可視化 ▌ジョブのサマリー画面に表示 ▌実体はMermaidの図
actions-timelineの使い方 ジョブが1つだけのシンプルなケース jobs: build: runs-on: ubuntu-latest steps: - uses: Kesin11/actions-timeline@v2 - run: make build # 本来実行したいステップ 複数ジョブが並列で実行されているケース jobs: build-1: build-2: build-3: actions-timeline: needs: [build-1, build-2, build-3] runs-on: ubuntu-latest steps: - uses: Kesin11/actions-timeline@v2 ▌左:シンプルなケースでは一番最初にactions-timelineを呼び出すだけ ▌右:複雑なケースではneedsを利用して一番最後に独立したジョブで実行を推奨 ◼ APIで情報を集める際にジョブが既に終了している必要があるため
actions-timelineができること ▌視覚的にどのジョブ・ステップに時間が かかっているか分かる ▌クリティカルパスが分かる ◼ ただし目視
actions-timelineの設計思想 ▌GitHub単体で完結させ、とにかく導入を簡単に ▌人間の目とカンは優秀 ◼ 一目見ればクリティカルパスも直感で分かる ▌可視化さえできれば最適化のノウハウはたくさん存在する ◼ 今日もそういう発表をたくさん聞けるはず!
actions-timelineができないこと ▌ジョブの成功率や実行時間などの統計 分析 ▌過去の情報との比較 CircleCI Insightのワークフロー分析 ▌CircleCI Insightや以前に自作した Kesin11/CIAnalyzerは逆にこれらが 可能 CIAnalyzer + Looker Studioのワークフロー分析
統計的な分析についての最近の所感 ▌昔はむしろ頑張ってた。現在はあまり重視していない ◼ CI/CDのボトルネックを把握できていますか?BigQueryでビルド情報ダッシュボー ドを構築した話(CI/CD Conference 2021) ◼ ゲーム開発のJenkins整備から横断SREチームが誕生するまで(DeNA TechCon 2023) ▌いつの間にかジョブが遅くなっている問題の分析には効果的だった ▌一方で具体的な改善点を見つけるにはやはり1回1回のログを見る必要があった ▌CI/CD専門ポジションがいるなら別だが、多くの人はワークフロー1回の実行について 可視化できれば十分では?と考え方が変わった ▌統計分析が必要な人はKesin11/CIAnalyzerやSaaSの機能を頼りましょう
統計的な分析についての最近の所感 ▌このあたりの詳細やactions-timeline開発の経緯はZennの記事で! https://zenn.dev/cybozu_ept/articles/20231002_actions_timeline
actions-timelineのその先
actions-timelineのその先 ▌可視化さえできれば何とかなると言ったけど、ちょっと嘘かもしれない ▌ボトルネックの改善は知識と経験が必要 ◼ キャッシュ、並列化、マシンスペック、ネットワーク問題 etc… ◼ サイボウズ社内では相談してもらえれば生産性向上チームがサポート
actions-timelineのその先 ▌都度サポートはスケールしないし組織に対してレバレッジが効きにくい ▌基本的なアドバイスを代行してくれるツールが欲しい ◼ Trivyみたいなセキュリティスキャンツールのイメージ ◼ actionlintみたいな静的解析とはちょっと違う ▌もしあったら教えて下さい。なければ作る
まとめ ▌最適化のメタな話 ◼ 推測するな、計測せよ ◼ クリティカルパスから最適化 ▌Kesin11/actions-timelineの紹介 ◼ 良いものだと思ったらスターもらえると嬉しいです! ▌次はCI/CD最適化のスキャンツールが欲しい
付録 ▌CircleCI ◼ インサイトの使用 ◼ テストインサイト ▌Azure Pipelines ◼ パイプライン分析 ◼ テスト分析 ▌Kesin11/CIAnalyzer ◼ CI/CDのデータを収集するCIAnalyzerの紹介