Slide 1

Slide 1 text

計測による継続的なCI/CDの改善 〜GitHub Actions OpenTelemetryを活⽤した効果測定〜 Sansan株式会社 上司陽平(じょーし)

Slide 2

Slide 2 text

2 © Sansan, Inc. ⾃⼰紹介 じょーし Sansan株式会社 @paper2parasol - 請求書管理サービス「Bill One」のソフトウェア エンジニア兼SRE - 負荷試験による性能改善、IaC化と⽂化醸成、 機能開発などを担当 - 有志メンバによるCI/CD改善チームを運営し、 ⽇々の開発者体験の向上に取り組む - GitHub Actionsの実⾏時間を可視化するOSS 「GitHub Actions OpenTelemetry」を個⼈開発 - 好きなものはラーメンとCloud Run

Slide 3

Slide 3 text

3 © Sansan, Inc. © Sansan, Inc.

Slide 4

Slide 4 text

本⽇のテーマ CI/CDを計測し、 継続的な改善や効果測定に活⽤しよう

Slide 5

Slide 5 text

5 © Sansan, Inc. アジェンダ CI/CDのオブザーバビリティ CI/CD改善の取り組み GitHub Actions OpenTelemetry 活⽤事例

Slide 6

Slide 6 text

CI/CDのオブザーバビリティ

Slide 7

Slide 7 text

CI/CDの改善していますか??

Slide 8

Slide 8 text

CI/CDの実⾏時間、 計測していますか??

Slide 9

Slide 9 text

改善と効果測定はセット

Slide 10

Slide 10 text

継続的な測定と改善のループが重要

Slide 11

Slide 11 text

CI/CDもオブザーバビリティが重要 システムがある程度複雑になると、CI/CDパイプライン で何が起こっているかを理解するために、オブザーバ ビリティが不可⽋な、時には必須のデバッグツールに なりえます。 引⽤:オブザーバビリティ・エンジニアリング Charity Majors, Liz Fong-Jones, and George Miranda

Slide 12

Slide 12 text

CI/CD改善の取り組み

Slide 13

Slide 13 text

13 © Sansan, Inc. ギルド - 社内の特定分野の課題を解決する有志メ ンバの集まりをギルドとよんでいる - その分野の知⾒を深めることや、横のつ ながり、学びの⽂化醸成が⽬的 - 定期的にアウトプットを実施 (成果発表 会、ギルドLT会など)

Slide 14

Slide 14 text

14 © Sansan, Inc. 取り組み例 - Gradleリモートキャッシュ活⽤によるリリース時間短縮 - Migrationに伴う不要なダウンロード削減によるリリース時間短縮 - CIプラットフォームの移⾏(Google Cloud Build → GitHub Actions) - Slackでマージした開発者にメンションでデプロイ通知 - 放置プルリクエストを⾃動でクローズする...etc CI/CDギルドで 様々なCI/CDの改善に取り組んでいる

Slide 15

Slide 15 text

15 © Sansan, Inc. - GitHub ActionsとCloud Buildを 併⽤ - Monorepo構成 - Reusable Workflowでマイクロサ ービスごとに同様のジョブを実⾏ Bill OneのCI/CD Cloud Build Bill One CI/CDフローのサマリ

Slide 16

Slide 16 text

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のコード例

Slide 17

Slide 17 text

17 © Sansan, Inc. ワークフローの変更による影響を分析しづらい GitHub Actionsにおける課題 ① Actions Performance Metrics - 各ワークフローとジョブの失敗率 や平均実⾏時間を参照可能 - 改善による変化を確認しづらい (表⽰される⽇付範囲を変更し、 平均値で⽐較することは可能) - パーセンタイル値などの統計指標 は利⽤できない

Slide 18

Slide 18 text

18 © Sansan, Inc. CIの実⾏情報が網羅的に収集されるので分析⽤途では最強 解決策:CIAnalyzer - 実⾏結果をBigQueryに保存し、 Looker Studioで可視化 - セットアップにGoogle Cloudの 基礎知識が必要 ダッシュボードサンプル https://github.com/Kesin11/CIAnalyzer より引⽤

Slide 19

Slide 19 text

19 © Sansan, Inc. 各ステップの実⾏時間を可視化する⽅法が提供されていない GitHub Actionsにおける課題 ② GitHub Actions Summary - ジョブの実⾏時間や依存関係など の概要はSummaryで確認可能 - ジョブ内の各ステップの実⾏時間 やエラー発⽣箇所などはログの確 認が必要

Slide 20

Slide 20 text

20 © Sansan, Inc. ステップを含めた実⾏時間を可視化し、サマリーページに追加 解決策:Actions Timeline - トレースでステップを含めた実⾏ 結果を可視化 - 簡単に追加できて、GitHubで完結 するので最強 - トレースだけみたいならこれだけ でよい トレースのサンプル https://github.com/Kesin11/actions-timeline より引⽤

Slide 21

Slide 21 text

全部解決 🎉

Slide 22

Slide 22 text

22 © Sansan, Inc. - CIAnalyzerは分析⽤途で最強 だけどセットアップが⼤変... - BigQueryやLooker Studio初めて 使うので勉強は必要だった... - 使い慣れたオブザーバビリティ バックエンドで⼀緒に⾒たい... GitHub Actions OpenTelemetry開発の動機 OpenTelemetryを活⽤ できそう!! 利⽤する上で感じたペインを解決してみたくなった

Slide 23

Slide 23 text

GitHub Actions OpenTelemetry

Slide 24

Slide 24 text

24 © Sansan, Inc. 1. GitHub Actionsのワークフロー・ジョブ実⾏時間のメトリクスを収集 2. ワークフロー・ジョブ・ステップのトレースを収集 3. OpenTelemetry Protocol(OTLP)互換のバックエンドにデータを送信 4. 既存のワークフローに⼿を加えることなくテレメトリを収集 GitHub Actions OpenTelemetryの主な機能

Slide 25

Slide 25 text

25 © Sansan, Inc. ワークフローの変更による影響を分析しづらい (再掲) GitHub Actionsにおける課題 ① Actions Performance Metrics - 各ワークフローとジョブの失敗率 や平均実⾏時間を参照可能 - 改善による変化を確認しづらい (表⽰される⽇付範囲を変更し、 平均値で⽐較することは可能) - パーセンタイル値などの統計指標 は利⽤できない

Slide 26

Slide 26 text

26 © Sansan, Inc. ワークフロー・ジョブの実⾏時間メトリクスをOTLPで送信可能 解決策:GitHub Actions OpenTelemetry - OpenTelemetry Protocol(OTLP)対応の任 意のオブザーバビリティバックエンドに 送信可能 - 改善による変化をグラフで容易に確認可 能 - オブザーバビリティバックエンドが対応 する平均以外の統計値も利⽤可能 - ワークフロー名やジョブ名などの属性に よるグルーピングが可能 ダッシュボードサンプル(Cloud Monitoring)

Slide 27

Slide 27 text

27 © Sansan, Inc. 各ステップの実⾏時間を可視化する⽅法が提供されていない (再掲) GitHub Actionsにおける課題 ② GitHub Actions Summary - ジョブの実⾏時間や依存関係など の概要はSummaryで確認可能 - ジョブ内の各ステップの実⾏時間 やエラー発⽣箇所などはログの確 認が必要

Slide 28

Slide 28 text

28 © Sansan, Inc. 各ステップの実⾏時間やエラーが発⽣したステップを視覚的に確認できる 解決策:GitHub Actions OpenTelemetry - OpenTelemetry Protocol(OTLP) 対応の任意のオブザーバビリティ バックエンドに送信可能 ダッシュボードサンプル(Cloud Trace)

Slide 29

Slide 29 text

GitHub Actions OpenTelemetryの活⽤

Slide 30

Slide 30 text

30 © Sansan, Inc. - キャッシュが効かない場合があるため、実環境で効果があったことを 確認したい - 例えばキャッシュの有効期限を1週間としているため、キャッシュが ない場合もある - 各マイクロサービスごとでテスト時間が異なるため、マイクロサービス ごとに効果を測定したい Gradleリモートキャッシュ活⽤の効果測定

Slide 31

Slide 31 text

31 © Sansan, Inc. リリース時の平均テスト時間を約70%削減(17.5m → 5m) GitHub Actions OpenTelemetryによる計測結果 - 効果が⼤きいマイクロサービスでは開発 者が実感できるレベルで短縮できた - テスト時間が短いサービスでも約10%の 削減効果は得られた(4.2m -> 3.8m) 効果が⼤きかったマイクロサービスの リリース時のテスト時間推移

Slide 32

Slide 32 text

32 © Sansan, Inc. 本⽇のテーマ CI/CDを計測し、継続的な改善や効果測定に活⽤しよう - GitHub Actionsの提供する機能では改善効果を計測しづらい - 効果測定にGitHub Actions OpenTelemetryを活⽤した - 有志メンバでBill OneのCI/CDを改善し、リリース時の平均テスト時間を 最⼤約70%削減できた まとめ

Slide 33

Slide 33 text

ご清聴ありがとうございました

Slide 34

Slide 34 text

34 © Sansan, Inc. © Sansan, Inc. 請求書受領から、⽉次決算を加速する インボイス管理サービス