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

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

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

Kenta Kase

September 03, 2021
Tweet

More Decks by Kenta Kase

Other Decks in Programming

Transcript

  1. CI/CDͷϘτϧωοΫΛ೺ѲͰ͖͍ͯ·͔͢ʁ


    BigQueryͰϏϧυ৘ใμογϡϘʔυΛ

    ߏஙͨ͠࿩
    CI/CD Conference 2021ʢ2021/09/03ʣ


    Ճ੉݈ଠ @Kesin11

    View Slide

  2. ࣗݾ঺հ
    • ॴଐɿDeNAͷSWETάϧʔϓʢSoftWare Engineer in Testʣ


    • Twitterɿ@Kesin11ɺGitHubɿKesin11


    • CI/CDαʔϏεͷϚχΞͳͷͰ༗໊ͳαʔϏε͸େମνϣοτϫΧϧ


    • ͜͜2೥΄ͲओʹϞόΠϧήʔϜͷJenkinsͷߏஙɺӡ༻ɺύΠϓϥΠϯߏங


    • CEDEC2020ʮϞ
    バ
    Πϧ
    ゲ
    ʔϜ։ൃʹ͓͚ΔJenkins ʙΫϥ΢
    ド
    ࣌୅ͷ
    Jenkinsߏஙͱ؅ཧςΫχοΫʙʯ

    View Slide

  3. ൃද಺༰
    • CI/CDΛ௕ظؒӡ༻͢Δͱݟ͑ͯ͘Δ໰୊


    • ࣗ࡞ͷϏϧυσʔλऩूπʔϧͷ঺հ


    • μογϡϘʔυΛ࡞੒ͨ͜͠ͱͰՄೳʹͳͬͨ͜ͱ


    • ࣮຿ͰղܾͰ͖࣮ͨྫͷ঺հ

    View Slide

  4. લఏ
    • ຊൃද͸ओʹiOS/AndroidΞϓϦΛCIαʔϏε্ͰϏϧυ͢Δߏ੒


    • ಛʹJenkins + ࣗલͷmac + iOS/Android + Unity


    • k8s + ίϯςφϏϧυͷੈքͱ͸՝୊ײ͕ҟͳΔ͔΋͠Ε·ͤΜ

    View Slide

  5. ͜͜࠷ۙCI/CDք۾͕೤͍
    • Github Actions, CircleCI, Bitrise, Azure Pipelines


    • k8sͱίϯςφք۾΋৽πʔϧͷ࿩͕ͲΜͲΜฉ͑ͯ͘͜Δ


    • ৽͍͠πʔϧͷ৽͍͠ػೳͰ࣮ݱͰ͖Δ͜ͱΛߟ͑Δͷ͸ͱͯ΋ָ͠
    ͍

    View Slide

  6. CI/CDΛ௕ظӡ༻͢Δͱݟ͑ͯ͘Δ໰୊
    • Ϗϧυ͕͍࣌ؒͭͷؒʹ͔ͱͯ΋௕͘ͳ͍ͬͯΔ


    • ϥϯμϜʹͨ·ʹࣦഊ͢ΔϏϧυ


    • ϏϧυΩϡʔ͕٧·Γ͕ͪ


    • Ϗϧυɾςετͷࣦഊ͕์ஔ͞Ε͕ͪʹͳΔ

    View Slide

  7. Azure Pipelines
    • Azure PipelinesͰ͸ਆμογϡϘʔυ͕σϑΥϧτͰ࢖͑Δʂ
    ը૾ɿmicrosoft/typescriptͷAzure Pieplines

    View Slide

  8. ύΠϓϥΠϯͷ੒ޭ/
    ࣦഊ෼ੳ
    ੒ޭ཰


    ͍ࣦͭഊ͔ͨ͠


    Ͳͷεςοϓ͕ࣦഊ͔ͨ͠
    https://typescript.visualstudio.com/TypeScript/_pipeline/analytics/
    stageawareoutcome?de
    fi
    nitionId=6&contextType=build

    View Slide

  9. ςετ݁Ռ
    ςετͷ੒ޭ཰


    ੒ޭ཰ͷਪҠ


    ࣦഊͨ͠ςετέʔεͷҰཡ


    ςετέʔε͝ͱͷฏۉ࣌ؒ
    https://typescript.visualstudio.com/TypeScript/_test/analytics?
    de
    fi
    nitionId=6&contextType=build

    View Slide

  10. ύΠϓϥΠϯͷ࣌ؒ
    ࣌ؒͷਪҠ


    εςοϓ͝ͱʹ͔͔Δ࣌ؒ
    https://typescript.visualstudio.com/TypeScript/_pipeline/analytics/
    duration?de
    fi
    nitionId=6&contextType=build

    View Slide

  11. ͜Εͩɾɾɾʂ

    View Slide

  12. ଞͷCIαʔϏεͰ΋ಉ͡΋ͷ͕ཉ͍͠ɾɾɾʂ
    • ౰࣌͸ྨࣅαʔϏεΛݟ͚ͭΒΕͳ͔ͬͨ


    • ݱࡏͰ͸ଘࡏ͠·͢ʢޙड़ʣ


    • Github Actions΍CircleCIͷAPIΛࢼͨ͠ͱ͜ΖɺAzure Pipelinesͱಉ
    ౳ͷμογϡϘʔυΛ࡞Δͷʹඞཁͳσʔλ͸औಘͰ͖ͦ͏


    • ͜͏ͳͬͨΒࣗ࡞͢Δ͔͠ͳ͍

    View Slide

  13. CIAnalyzer
    • https://github.com/Kesin11/CIAnalyzer


    • ֤CIαʔϏεͷAPI͔Βσʔλऔಘɺ੔ܗɺ݁ՌͷΤΫεϙʔτ


    • Github Actions, CircleCI, Jenkins, BitriseʹରԠ


    • αʔόʔͷӡ༻ෆཁ


    • DBͷӡ༻ෆཁ


    • CIଆʹಛผͳπʔϧ΍εςοϓͷ௥Ճෆཁ


    • σʔλ͸֤ࣗͰ޷͖ͳ৔ॴʹΤΫεϙʔτʢBigQueryΛެࣜαϙʔτʣ

    View Slide

  14. Ϗϧυ࣌ؒͱ੒ޭ཰

    View Slide

  15. δϣϒͱεςοϓຖͷ࣌ؒ

    View Slide

  16. ςετ݁ՌͱςετέʔεҰཡ

    View Slide

  17. Ωϡʔ଴ͪ࣌ؒ

    View Slide

  18. BigQuery + DataStudio
    • σʔλ͸BigQueryʹ஝ੵ


    • ࣗલͰDBӡ༻͕ෆཁ


    • σʔλྔʹΑΔύϑΥʔϚϯεͷݒ೦͕ͳ͍


    • ਖ਼نԽͤͣʹJSONͷߏ଄Λͦͷ··౤ೖՄೳ
    • μογϡϘʔυ͸DataStudioʢDataPortalʣ


    • ಉ͡GoogleͷαʔϏεͳͷͰBigQueryͱ૬ੑൈ܈


    • JSONͷߏ଄ͷ··͍͍ײ͡ʹάϥϑ͕࡞ΕΔ


    • μογϡϘʔυ༻ͷWebαʔόʔͷӡ༻͕ෆཁ


    • ݖݶ؅ཧ͕GDriveͱಉ͡UIͳͷͰ୭Ͱ΋ઃఆ͠΍͍͢

    View Slide

  19. CIAnalyzerͷΞʔΩςΫνϟ
    • ֤αʔϏεͷAPIΛར༻ͯ͠σʔλΛऔಘ͢Δpullܕ


    • ύΠϓϥΠϯதͰಛผͳπʔϧΛಈ͔͢ઃఆͷ௥Ճ͸ෆཁ


    • ऩूର৅Λઃఆ༻ͷYAMLʹهࡌ͢Δ


    • Ͳ͔͜ͷ؀ڥͰఆظతʹىಈͰ͖Ε͹OK


    • ͓࢖͍ͷCIαʔϏεͷεέδϡʔϧ࣮ߦΛར༻͢Δͷ͕؆୯


    • ࣗલͰαʔόʔͷӡ༻͕ෆཁ

    View Slide

  20. શମతͳಛ௃
    • ͱʹ͔͘௿ίετʹӡ༻Ͱ͖ͯۀ຿Ͱ࢖͏োน͕ۃྗͳ͍Α͏ʹઃܭ


    • ࣗલͰαʔόʔΛӡ༻͢Δඞཁ͕ͳ͍


    • ύΠϓϥΠϯͷதͰಛผͳπʔϧΛಈ͔͢ඞཁ͕ͳ͍


    • ֎෦αʔϏεʹσʔλΛ౉͞ͳ͍ͷͰۀ຿Ͱ΋࢖͍΍͍͢

    View Slide

  21. μογϡϘʔυΛ࡞੒ͨ͠

    ͜ͱͰՄೳʹͳͬͨ͜ͱ

    View Slide

  22. աڈͷϏϧυه࿥Λ
    શͯḪΕΔ
    BigQueryͷྗʹΑͬͯաڈͷσʔ
    λશͯΛදࣔͤͯ͞΋࣌ؒ͸΄΅͔
    ͔Βͳ͍


    ΄ͱΜͲͷCIαʔϏεͰաڈͷه࿥
    ͸࢒͍ͬͯΔ΋ͷͷɺḪͬͯूܭ͢
    Δ͜ͱ͸ࠔ೉ͳͷͰେ͖ͳϝϦοτ
    ͱͳΔ
    iOS/Androidͷ1೥ؒͷφΠτϦʔϏϧυ
    ࣦഊͨ͠Ϗϧυɺࣦഊͨ͠εςοϓͷΈߜΓࠐΈ

    View Slide

  23. ฏۉతͳϏϧυ࣌ؒ
    ͷ૿Ճ܏޲ͷਖ਼֬ͳ
    ೺Ѳ
    ҆ఆ͢Δϒϥϯνɺ੒ޭͨ͠Ϗϧυ͚ͩͰϓ
    ϩοτ


    masterϒϥϯνɺφΠτϦʔϏϧυΈ͍ͨ
    ͳ҆ఆ͍ͯ͠Δ৚͕݅ϕετ


    ମײͰ͸ͳ͘ɺ਺ϲ݄લͱൺֱͯ͠ͲΕ͚ͩ
    ͕࣌ؒ௕͘ͳ͍ͬͯΔ͔ਖ਼֬ʹ೺ѲͰ͖Δ


    ௚ۙͰϏϧυ͕࣌ؒڐ༰Ͱ͖ͳ͍଎౓Ͱ૿Ճ
    ܏޲Ͱ͋Ε͹ૣظʹରࡦΛݕ౼͢Δ
    iOS/Androidͷ1೥ؒͷϏϧυ࣌ؒͷਪҠ
    φΠτϦʔɿΩϟογϡONɺΫϦʔϯɿΩϟογϡOFF

    View Slide

  24. CI/CDͷσʔλ஝ੵʹΑͬͯ
    ղܾͰ͖࣮ͨྫ঺հ

    View Slide

  25. ಛఆͷεςοϓ͕ੲʹൺ΂ͯେ෯ʹ͕͔͔࣌ؒ
    ΔΑ͏ʹͳ͍ͬͯͨࣄྫ
    • iOS/AndroidΞϓϦͷϏϧυ࣌ؒվળͷͨΊɺ͕͔͔͍࣌ؒͬͯΔεςοϓΛ෼ੳ͍ͯͨ͠ͱ͜ΖGCS
    ʹΞοϓϩʔυ͍ͯ͠Δεςοϓʹ7෼΋͔͔͍ͬͯͨ


    • ੲ͸ͦΜͳʹ͕͔͔͍࣌ؒͬͯͨهԱ͕ͳ͍ͷͰ2ϲ݄·ͰσʔλΛḪͬͯൺֱͨ͠ͱ͜Ζɺ

    2෼ˠ7෼ʹ৳ͼ͍ͯͨ͜ͱ͕൑໌


    • 1ճͷϏϧυதʹGCS΁ͷΞοϓϩʔυ͸ෳ਺ճߦ͍ͬͯͨͷͰɺ͋Δδϣϒʹ͓͍ͯ͸શମͷϏϧυ
    ࣌ؒͷ໿20%ऑ΋઎Ίͯ͠·͍ͬͯͨ


    • gsutil rsyncͷࡍʹసૹʹඞཁͳϑΝΠϧΛಛఆ͢Δॲཧ͕࣌ؒϑΝΠϧ਺૿Ճʹ൐ͬͯ৳ͼ͍ͯͨ͜ͱ
    ͕ݪҼ


    • gsutil cp ʹஔ͖׵͑Δ͜ͱͰݩͷ7෼ˠ30ඵʹ·ͰվળͰ͖ͨ

    View Slide

  26. CircleCIͰͷόοΫΤϯυαʔόʔͷϏϧυ͕
    كʹࣦഊ͢Δࣄྫ
    • ͋Δͱ͖͔ΒCircleCIͷϏϧυδϣϒ͕كʹࣦഊɺϦτϥΠ͢Δͱ௚Δ͜ͱ΋͋Δͱ͍͏Ṗݱ৅͕ൃੜ


    • μογϡϘʔυ্ͰFailedͳδϣϒɺ͞ΒʹFailedʹͳͬͨݪҼͷεςοϓΛௐࠪͯ͠ҎԼΛݪҼΛಛఆ


    • docker buildதͷίϯύΠϧΤϥʔ


    • ڊେϦϙδτϦͷgit cloneʹࣦഊ͍ͯ͠Δ


    • ݪҼ͕2ͭ͋Δ͜ͱɺٯʹͦΕҎ֎ͷݪҼ͸ແ͍͜ͱΛಥ͖ࢭΊΒΕͨ͜ͱ͕େ͖͍


    • લऀ͸ίʔυΛ௚ͯ͠΋Β͍ɺޙऀͷgit clone͸ݪҼΛಛఆͰ͖ͳ͔ͬͨͷͰCircleCIͷresource_class
    Λ1ஈ֊্͛ͯΈΔ͜ͱʹ


    • 1िؒ΄Ͳ༷ࢠݟΛͨ݁͠Ռ࠶ൃ͠ͳ͘ͳͬͨͷͰղܾ

    View Slide

  27. ྨࣅαʔϏεͷ঺հ
    • CIAnalyzerͱࣅͨΑ͏ͳػೳΛఏڙ͍ͯ͠ΔαʔϏεͷ঺հ


    • ͨͩ͠ɺ͍ͣΕ΋CIAnalyzer΄Ͳৄࡉͳ෼ੳ͸Ͱ͖ͳ͍


    • Azure Pipelinesʢ࠶ܝʣ


    • ࣗ෼ʹͱͬͯ͸ຊՈɻAzureΛ͓࢖͍ͷํ͸ͥͻ͓ࢼ͠Λ

    View Slide

  28. CircleCIͷInsightsػೳ
    Ϗϧυ࣌ؒɺ੒ޭ཰͸ݟΒΕΔ


    தԝ஋ͱ95%λΠϧʹΑͬͯ֎Ε஋Λ
    আ֎Ͱ͖Δͷ͸ૉ੖Β͍͠


    ςετέʔε͝ͱͷ੒ޭ཰΍ɺ࣌ؒ৘ใ
    ΋ݟΒΕΔʢ·ͩpreivewػೳʣ


    εςοϓ͝ͱͷ࣌ؒ΍੒ޭ཰ΛݟΒΕ
    ͳ͍ͷͰݸਓతʹ͸ػೳ͕଍Γͳ͍

    View Slide

  29. meercode.io
    ෳ਺ͷCIαʔϏεʹରԠͨ͠μογϡ
    ϘʔυΛ࡞੒Ͱ͖ΔαʔϏε


    Github Actions΍Bitriseɺͦͷଞͷαʔ
    Ϗε΋αϙʔτ


    Ϗϧυ࣌ؒɺ੒ޭ཰ɺϦϙδτϦ͝ͱͷ
    CIαʔϏεͷ࢖༻࣌ؒͳͲ


    εςοϓ͝ͱͷ࣌ؒ΋෼ੳՄೳ

    View Slide

  30. ·ͱΊ
    • CI/CDΛ௕ظӡ༻͍ͯ͘͠ͱൃੜ͢Δ໰୊ͷௐࠪίετ͸ߴ͍


    • Ϗϧυ࣌ؒͷ૿Ճ


    • ͨ·ʹࣦഊ͢ΔϏϧυ


    • ϏϧυσʔλΛ෼ੳՄೳʹ͢Δ


    • ࣗ࡞ͨ͠CIAnalyzerͷ঺հ


    • BigQuery + DataStudioʢDataPortalʣ


    • ࣮ࡍʹۀ຿Ͱศརʹ׆༻Ͱ͖͍ͯΔࣄྫͷ঺հ
    k8s + ίϯςφϏϧυͷCI/CDͷੈք͸ৄ͘͠ͳ͍ͷͰɺ

    ͜ͷք۾Ͱ͸͜͏͍͏πʔϧ͕͋Γ·͢Έ͍ͨͳ৘ใΛڭ͑ͯ΋Β͑Δͱخ͍͠Ͱ͢ʂ

    View Slide

  31. ࢀߟ৘ใ
    • 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Λ࢖ͬͯΔ΋ͷ͕ଟ͍

    View Slide

  32. ࢀߟ৘ใ
    • CircleCIʢInsightͷυΩϡϝϯτʣ https://circleci.com/docs/2.0/
    insights/


    • Meercode meercode.io

    View Slide

  33. View Slide