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

計測による継続的なCI/CDの改善

 計測による継続的なCI/CDの改善

■ イベント
Jagu'e'r オブザービリティ分科会 Meetup#2
https://jaguer-o11y-sre.connpass.com/event/352510/

■ 発表者
技術本部 Bill One Engineering Unit Core Business UMグループ
上司 陽平

■ Bill One エンジニア 採用情報
https://media.sansan-engineering.com/billone-engineer

Avatar for SansanTech

SansanTech

May 13, 2025
Tweet

More Decks by SansanTech

Other Decks in Technology

Transcript

  1. 2 © Sansan, Inc. ⾃⼰紹介 じょーし Sansan株式会社 @paper2parasol - 請求書管理サービス「Bill

    One」のソフトウェア エンジニア兼SRE - 負荷試験による性能改善、IaC化と⽂化醸成、 機能開発などを担当 - 有志メンバによるCI/CD改善チームを運営し、 ⽇々の開発者体験の向上に取り組む - GitHub Actionsの実⾏時間を可視化するOSS 「GitHub Actions OpenTelemetry」を個⼈開発 - 好きなものはラーメンとCloud Run
  2. 13 © Sansan, Inc. ギルド - 社内の特定分野の課題を解決する有志メ ンバの集まりをギルドとよんでいる - その分野の知⾒を深めることや、横のつ

    ながり、学びの⽂化醸成が⽬的 - 定期的にアウトプットを実施 (成果発表 会、ギルドLT会など)
  3. 14 © Sansan, Inc. 取り組み例 - Gradleリモートキャッシュ活⽤によるリリース時間短縮 - Migrationに伴う不要なダウンロード削減によるリリース時間短縮 -

    CIプラットフォームの移⾏(Google Cloud Build → GitHub Actions) - Slackでマージした開発者にメンションでデプロイ通知 - 放置プルリクエストを⾃動でクローズする...etc CI/CDギルドで 様々なCI/CDの改善に取り組んでいる
  4. 15 © Sansan, Inc. - GitHub ActionsとCloud Buildを 併⽤ -

    Monorepo構成 - Reusable Workflowでマイクロサ ービスごとに同様のジョブを実⾏ Bill OneのCI/CD Cloud Build Bill One CI/CDフローのサマリ
  5. 16 © Sansan, Inc. GitHub Actionsの⽤語説明 name: workflow-name on: [push]

    jobs: job-name: runs-on: ubuntu-latest steps: - run: command Workflow Job Step GitHub Actionsのコード例
  6. 17 © Sansan, Inc. ワークフローの変更による影響を分析しづらい GitHub Actionsにおける課題 ① Actions Performance

    Metrics - 各ワークフローとジョブの失敗率 や平均実⾏時間を参照可能 - 改善による変化を確認しづらい (表⽰される⽇付範囲を変更し、 平均値で⽐較することは可能) - パーセンタイル値などの統計指標 は利⽤できない
  7. 18 © Sansan, Inc. CIの実⾏情報が網羅的に収集されるので分析⽤途では最強 解決策:CIAnalyzer - 実⾏結果をBigQueryに保存し、 Looker Studioで可視化

    - セットアップにGoogle Cloudの 基礎知識が必要 ダッシュボードサンプル https://github.com/Kesin11/CIAnalyzer より引⽤
  8. 19 © Sansan, Inc. 各ステップの実⾏時間を可視化する⽅法が提供されていない GitHub Actionsにおける課題 ② GitHub Actions

    Summary - ジョブの実⾏時間や依存関係など の概要はSummaryで確認可能 - ジョブ内の各ステップの実⾏時間 やエラー発⽣箇所などはログの確 認が必要
  9. 20 © Sansan, Inc. ステップを含めた実⾏時間を可視化し、サマリーページに追加 解決策:Actions Timeline - トレースでステップを含めた実⾏ 結果を可視化

    - 簡単に追加できて、GitHubで完結 するので最強 - トレースだけみたいならこれだけ でよい トレースのサンプル https://github.com/Kesin11/actions-timeline より引⽤
  10. 22 © Sansan, Inc. - CIAnalyzerは分析⽤途で最強 だけどセットアップが⼤変... - BigQueryやLooker Studio初めて

    使うので勉強は必要だった... - 使い慣れたオブザーバビリティ バックエンドで⼀緒に⾒たい... GitHub Actions OpenTelemetry開発の動機 OpenTelemetryを活⽤ できそう!! 利⽤する上で感じたペインを解決してみたくなった
  11. 24 © Sansan, Inc. 1. GitHub Actionsのワークフロー・ジョブ実⾏時間のメトリクスを収集 2. ワークフロー・ジョブ・ステップのトレースを収集 3.

    OpenTelemetry Protocol(OTLP)互換のバックエンドにデータを送信 4. 既存のワークフローに⼿を加えることなくテレメトリを収集 GitHub Actions OpenTelemetryの主な機能
  12. 25 © Sansan, Inc. ワークフローの変更による影響を分析しづらい (再掲) GitHub Actionsにおける課題 ① Actions

    Performance Metrics - 各ワークフローとジョブの失敗率 や平均実⾏時間を参照可能 - 改善による変化を確認しづらい (表⽰される⽇付範囲を変更し、 平均値で⽐較することは可能) - パーセンタイル値などの統計指標 は利⽤できない
  13. 26 © Sansan, Inc. ワークフロー・ジョブの実⾏時間メトリクスをOTLPで送信可能 解決策:GitHub Actions OpenTelemetry - OpenTelemetry

    Protocol(OTLP)対応の任 意のオブザーバビリティバックエンドに 送信可能 - 改善による変化をグラフで容易に確認可 能 - オブザーバビリティバックエンドが対応 する平均以外の統計値も利⽤可能 - ワークフロー名やジョブ名などの属性に よるグルーピングが可能 ダッシュボードサンプル(Cloud Monitoring)
  14. 27 © Sansan, Inc. 各ステップの実⾏時間を可視化する⽅法が提供されていない (再掲) GitHub Actionsにおける課題 ② GitHub

    Actions Summary - ジョブの実⾏時間や依存関係など の概要はSummaryで確認可能 - ジョブ内の各ステップの実⾏時間 やエラー発⽣箇所などはログの確 認が必要
  15. 28 © Sansan, Inc. 各ステップの実⾏時間やエラーが発⽣したステップを視覚的に確認できる 解決策:GitHub Actions OpenTelemetry - OpenTelemetry

    Protocol(OTLP) 対応の任意のオブザーバビリティ バックエンドに送信可能 ダッシュボードサンプル(Cloud Trace)
  16. 30 © Sansan, Inc. - キャッシュが効かない場合があるため、実環境で効果があったことを 確認したい - 例えばキャッシュの有効期限を1週間としているため、キャッシュが ない場合もある

    - 各マイクロサービスごとでテスト時間が異なるため、マイクロサービス ごとに効果を測定したい Gradleリモートキャッシュ活⽤の効果測定
  17. 31 © Sansan, Inc. リリース時の平均テスト時間を約70%削減(17.5m → 5m) GitHub Actions OpenTelemetryによる計測結果

    - 効果が⼤きいマイクロサービスでは開発 者が実感できるレベルで短縮できた - テスト時間が短いサービスでも約10%の 削減効果は得られた(4.2m -> 3.8m) 効果が⼤きかったマイクロサービスの リリース時のテスト時間推移
  18. 32 © Sansan, Inc. 本⽇のテーマ CI/CDを計測し、継続的な改善や効果測定に活⽤しよう - GitHub Actionsの提供する機能では改善効果を計測しづらい -

    効果測定にGitHub Actions OpenTelemetryを活⽤した - 有志メンバでBill OneのCI/CDを改善し、リリース時の平均テスト時間を 最⼤約70%削減できた まとめ