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

CI/CDのボトルネックを把握できていますか?BigQueryでビルド情報ダッシュボードを構築した話

Avatar for Kenta Kase Kenta Kase
September 03, 2021

 CI/CDのボトルネックを把握できていますか?BigQueryでビルド情報ダッシュボードを構築した話

https://event.cloudnativedays.jp/cicd2021/talks/1152

開発人数が多く、規模の大きいプロダクトでは最終的な成果物をビルドするだけで1時間以上かかってしまうことも珍しくありません。ですが最初からそれほど時間がかかっていたわけではなく、時間とともに巨大化するコードベース、追加されたステップなどによりいつの間にかどこかの処理がボトルネックとなっていることが多いでしょう。

CIサービスの多くは成功/失敗の情報、全体としてのビルド時間の情報は見やすく提供していますが、各ステップの時間やステップのエラー率などの細かい粒度の情報を時系列で確認する機能までは提供されていないことが多いです。そのため、ボトルネック箇所を特定するためには過去の生ビルドログを自分の目で確認するコストが高い作業が必要でした。

そこで、Jenkins, CircleCI, Github Actions, BitiseのビルドデータをAPI経由で取得してBigQueryに蓄積するCIAnalyzerというツールを開発しました。さらにDataPortalでダッシュボードを作成してデータを可視化したことで、例えば以下のような問題の解決に役立ちました。

- 半年、1年前と比較してボトルネックとなっているステップの発見
- 不規則に発生する厄介なビルドエラーがいつから起きているのかの特定

これ以外にも実際の業務で問題の解決に役立った事例をいくつか紹介しながら、CI/CDのデータを長期に蓄積して分析することの重要性をお伝えしたいと思います。

参考:
https://github.com/Kesin11/CIAnalyzer

Avatar for Kenta Kase

Kenta Kase

September 03, 2021
Tweet

More Decks by Kenta Kase

Other Decks in Programming

Transcript

  1. ࣗݾ঺հ • ॴଐɿDeNAͷSWETάϧʔϓʢSoftWare Engineer in Testʣ • Twitterɿ@Kesin11ɺGitHubɿKesin11 • CI/CDαʔϏεͷϚχΞͳͷͰ༗໊ͳαʔϏε͸େମνϣοτϫΧϧ

    • ͜͜2೥΄ͲओʹϞόΠϧήʔϜͷJenkinsͷߏஙɺӡ༻ɺύΠϓϥΠϯߏங • CEDEC2020ʮϞ バ Πϧ ゲ ʔϜ։ൃʹ͓͚ΔJenkins ʙΫϥ΢ ド ࣌୅ͷ Jenkinsߏஙͱ؅ཧςΫχοΫʙʯ
  2. CIAnalyzer • https://github.com/Kesin11/CIAnalyzer • ֤CIαʔϏεͷAPI͔Βσʔλऔಘɺ੔ܗɺ݁ՌͷΤΫεϙʔτ • Github Actions, CircleCI, Jenkins,

    BitriseʹରԠ • αʔόʔͷӡ༻ෆཁ • DBͷӡ༻ෆཁ • CIଆʹಛผͳπʔϧ΍εςοϓͷ௥Ճෆཁ • σʔλ͸֤ࣗͰ޷͖ͳ৔ॴʹΤΫεϙʔτʢBigQueryΛެࣜαϙʔτʣ
  3. BigQuery + DataStudio • σʔλ͸BigQueryʹ஝ੵ • ࣗલͰDBӡ༻͕ෆཁ • σʔλྔʹΑΔύϑΥʔϚϯεͷݒ೦͕ͳ͍ •

    ਖ਼نԽͤͣʹJSONͷߏ଄Λͦͷ··౤ೖՄೳ • μογϡϘʔυ͸DataStudioʢDataPortalʣ • ಉ͡GoogleͷαʔϏεͳͷͰBigQueryͱ૬ੑൈ܈ • JSONͷߏ଄ͷ··͍͍ײ͡ʹάϥϑ͕࡞ΕΔ • μογϡϘʔυ༻ͷWebαʔόʔͷӡ༻͕ෆཁ • ݖݶ؅ཧ͕GDriveͱಉ͡UIͳͷͰ୭Ͱ΋ઃఆ͠΍͍͢
  4. ಛఆͷεςοϓ͕ੲʹൺ΂ͯେ෯ʹ͕͔͔࣌ؒ ΔΑ͏ʹͳ͍ͬͯͨࣄྫ • iOS/AndroidΞϓϦͷϏϧυ࣌ؒվળͷͨΊɺ͕͔͔͍࣌ؒͬͯΔεςοϓΛ෼ੳ͍ͯͨ͠ͱ͜ΖGCS ʹΞοϓϩʔυ͍ͯ͠Δεςοϓʹ7෼΋͔͔͍ͬͯͨ • ੲ͸ͦΜͳʹ͕͔͔͍࣌ؒͬͯͨهԱ͕ͳ͍ͷͰ2ϲ݄·ͰσʔλΛḪͬͯൺֱͨ͠ͱ͜Ζɺ 
 2෼ˠ7෼ʹ৳ͼ͍ͯͨ͜ͱ͕൑໌ •

    1ճͷϏϧυதʹGCS΁ͷΞοϓϩʔυ͸ෳ਺ճߦ͍ͬͯͨͷͰɺ͋Δδϣϒʹ͓͍ͯ͸શମͷϏϧυ ࣌ؒͷ໿20%ऑ΋઎Ίͯ͠·͍ͬͯͨ • gsutil rsyncͷࡍʹసૹʹඞཁͳϑΝΠϧΛಛఆ͢Δॲཧ͕࣌ؒϑΝΠϧ਺૿Ճʹ൐ͬͯ৳ͼ͍ͯͨ͜ͱ ͕ݪҼ • gsutil cp ʹஔ͖׵͑Δ͜ͱͰݩͷ7෼ˠ30ඵʹ·ͰվળͰ͖ͨ
  5. CircleCIͰͷόοΫΤϯυαʔόʔͷϏϧυ͕ كʹࣦഊ͢Δࣄྫ • ͋Δͱ͖͔ΒCircleCIͷϏϧυδϣϒ͕كʹࣦഊɺϦτϥΠ͢Δͱ௚Δ͜ͱ΋͋Δͱ͍͏Ṗݱ৅͕ൃੜ • μογϡϘʔυ্ͰFailedͳδϣϒɺ͞ΒʹFailedʹͳͬͨݪҼͷεςοϓΛௐࠪͯ͠ҎԼΛݪҼΛಛఆ • docker buildதͷίϯύΠϧΤϥʔ •

    ڊେϦϙδτϦͷgit cloneʹࣦഊ͍ͯ͠Δ • ݪҼ͕2ͭ͋Δ͜ͱɺٯʹͦΕҎ֎ͷݪҼ͸ແ͍͜ͱΛಥ͖ࢭΊΒΕͨ͜ͱ͕େ͖͍ • લऀ͸ίʔυΛ௚ͯ͠΋Β͍ɺޙऀͷgit clone͸ݪҼΛಛఆͰ͖ͳ͔ͬͨͷͰCircleCIͷresource_class Λ1ஈ֊্͛ͯΈΔ͜ͱʹ • 1िؒ΄Ͳ༷ࢠݟΛͨ݁͠Ռ࠶ൃ͠ͳ͘ͳͬͨͷͰղܾ
  6. ·ͱΊ • CI/CDΛ௕ظӡ༻͍ͯ͘͠ͱൃੜ͢Δ໰୊ͷௐࠪίετ͸ߴ͍ • Ϗϧυ࣌ؒͷ૿Ճ • ͨ·ʹࣦഊ͢ΔϏϧυ • ϏϧυσʔλΛ෼ੳՄೳʹ͢Δ •

    ࣗ࡞ͨ͠CIAnalyzerͷ঺հ • BigQuery + DataStudioʢDataPortalʣ • ࣮ࡍʹۀ຿Ͱศརʹ׆༻Ͱ͖͍ͯΔࣄྫͷ঺հ k8s + ίϯςφϏϧυͷCI/CDͷੈք͸ৄ͘͠ͳ͍ͷͰɺ 
 ͜ͷք۾Ͱ͸͜͏͍͏πʔϧ͕͋Γ·͢Έ͍ͨͳ৘ใΛڭ͑ͯ΋Β͑Δͱخ͍͠Ͱ͢ʂ
  7. ࢀߟ৘ใ • CIAnalyzer https://github.com/Kesin11/CIAnalyzer • ࢖͍ํͷ঺հهࣄ https://zenn.dev/kesin11/articles/cf08579949b8b0 • Azure Pipelines

    • TypeScriptʢnode14ͷCIʣ https://typescript.visualstudio.com/TypeScript/ _build?de fi nitionId=6&view=runs • Windows Terminal https://dev.azure.com/ms/terminal/_build? de fi nitionId=136&view=runs • GithubͷmicrosoftͷϦϙδτϦ͸Azure PipelinesΛ࢖ͬͯΔ΋ͷ͕ଟ͍