CI/CDのボトルネックを把握できていますか?BigQueryでビルド情報ダッシュボードを構築した話
by
Kenta Kase
Link
Embed
Share
Beginning
This slide
Copy link URL
Copy link URL
Copy iframe embed code
Copy iframe embed code
Copy javascript embed code
Copy javascript embed code
Share
Tweet
Share
Tweet
Slide 1
Slide 1 text
CI/CDͷϘτϧωοΫΛѲͰ͖͍ͯ·͔͢ʁ BigQueryͰϏϧυใμογϡϘʔυΛ ߏஙͨ͠ CI/CD Conference 2021ʢ2021/09/03ʣ Ճ݈ଠ @Kesin11
Slide 2
Slide 2 text
ࣗݾհ • ॴଐɿDeNAͷSWETάϧʔϓʢSoftWare Engineer in Testʣ • Twitterɿ@Kesin11ɺGitHubɿKesin11 • CI/CDαʔϏεͷϚχΞͳͷͰ༗໊ͳαʔϏεେମνϣοτϫΧϧ • ͜͜2΄ͲओʹϞόΠϧήʔϜͷJenkinsͷߏஙɺӡ༻ɺύΠϓϥΠϯߏங • CEDEC2020ʮϞ バ Πϧ ゲ ʔϜ։ൃʹ͓͚ΔJenkins ʙΫϥ ド ࣌ͷ JenkinsߏஙͱཧςΫχοΫʙʯ
Slide 3
Slide 3 text
ൃද༰ • CI/CDΛظؒӡ༻͢Δͱݟ͑ͯ͘Δ • ࣗ࡞ͷϏϧυσʔλऩूπʔϧͷհ • μογϡϘʔυΛ࡞ͨ͜͠ͱͰՄೳʹͳͬͨ͜ͱ • ࣮ͰղܾͰ͖࣮ͨྫͷհ
Slide 4
Slide 4 text
લఏ • ຊൃදओʹiOS/AndroidΞϓϦΛCIαʔϏε্ͰϏϧυ͢Δߏ • ಛʹJenkins + ࣗલͷmac + iOS/Android + Unity • k8s + ίϯςφϏϧυͷੈքͱ՝ײ͕ҟͳΔ͔͠Ε·ͤΜ
Slide 5
Slide 5 text
͜͜࠷ۙCI/CDք۾͕͍ • Github Actions, CircleCI, Bitrise, Azure Pipelines • k8sͱίϯςφք۾৽πʔϧͷ͕ͲΜͲΜฉ͑ͯ͘͜Δ • ৽͍͠πʔϧͷ৽͍͠ػೳͰ࣮ݱͰ͖Δ͜ͱΛߟ͑Δͷͱָͯ͠ ͍
Slide 6
Slide 6 text
CI/CDΛظӡ༻͢Δͱݟ͑ͯ͘Δ • Ϗϧυ͕͍࣌ؒͭͷؒʹ͔ͱͯ͘ͳ͍ͬͯΔ • ϥϯμϜʹͨ·ʹࣦഊ͢ΔϏϧυ • ϏϧυΩϡʔ͕٧·Γ͕ͪ • Ϗϧυɾςετͷࣦഊ͕์ஔ͞Ε͕ͪʹͳΔ
Slide 7
Slide 7 text
Azure Pipelines • Azure PipelinesͰਆμογϡϘʔυ͕σϑΥϧτͰ͑Δʂ ը૾ɿmicrosoft/typescriptͷAzure Pieplines
Slide 8
Slide 8 text
ύΠϓϥΠϯͷޭ/ ࣦഊੳ ޭ ͍ࣦͭഊ͔ͨ͠ Ͳͷεςοϓ͕ࣦഊ͔ͨ͠ https://typescript.visualstudio.com/TypeScript/_pipeline/analytics/ stageawareoutcome?de fi nitionId=6&contextType=build
Slide 9
Slide 9 text
ςετ݁Ռ ςετͷޭ ޭͷਪҠ ࣦഊͨ͠ςετέʔεͷҰཡ ςετέʔε͝ͱͷฏۉ࣌ؒ https://typescript.visualstudio.com/TypeScript/_test/analytics? de fi nitionId=6&contextType=build
Slide 10
Slide 10 text
ύΠϓϥΠϯͷ࣌ؒ ࣌ؒͷਪҠ εςοϓ͝ͱʹ͔͔Δ࣌ؒ https://typescript.visualstudio.com/TypeScript/_pipeline/analytics/ duration?de fi nitionId=6&contextType=build
Slide 11
Slide 11 text
͜Εͩɾɾɾʂ
Slide 12
Slide 12 text
ଞͷCIαʔϏεͰಉ͡ͷ͕ཉ͍͠ɾɾɾʂ • ࣌ྨࣅαʔϏεΛݟ͚ͭΒΕͳ͔ͬͨ • ݱࡏͰଘࡏ͠·͢ʢޙड़ʣ • Github ActionsCircleCIͷAPIΛࢼͨ͠ͱ͜ΖɺAzure Pipelinesͱಉ ͷμογϡϘʔυΛ࡞ΔͷʹඞཁͳσʔλऔಘͰ͖ͦ͏ • ͜͏ͳͬͨΒࣗ࡞͢Δ͔͠ͳ͍
Slide 13
Slide 13 text
CIAnalyzer • https://github.com/Kesin11/CIAnalyzer • ֤CIαʔϏεͷAPI͔Βσʔλऔಘɺܗɺ݁ՌͷΤΫεϙʔτ • Github Actions, CircleCI, Jenkins, BitriseʹରԠ • αʔόʔͷӡ༻ෆཁ • DBͷӡ༻ෆཁ • CIଆʹಛผͳπʔϧεςοϓͷՃෆཁ • σʔλ֤ࣗͰ͖ͳॴʹΤΫεϙʔτʢBigQueryΛެࣜαϙʔτʣ
Slide 14
Slide 14 text
Ϗϧυ࣌ؒͱޭ
Slide 15
Slide 15 text
δϣϒͱεςοϓຖͷ࣌ؒ
Slide 16
Slide 16 text
ςετ݁ՌͱςετέʔεҰཡ
Slide 17
Slide 17 text
Ωϡʔͪ࣌ؒ
Slide 18
Slide 18 text
BigQuery + DataStudio • σʔλBigQueryʹੵ • ࣗલͰDBӡ༻͕ෆཁ • σʔλྔʹΑΔύϑΥʔϚϯεͷݒ೦͕ͳ͍ • ਖ਼نԽͤͣʹJSONͷߏΛͦͷ··ೖՄೳ • μογϡϘʔυDataStudioʢDataPortalʣ • ಉ͡GoogleͷαʔϏεͳͷͰBigQueryͱ૬ੑൈ܈ • JSONͷߏͷ··͍͍ײ͡ʹάϥϑ͕࡞ΕΔ • μογϡϘʔυ༻ͷWebαʔόʔͷӡ༻͕ෆཁ • ݖݶཧ͕GDriveͱಉ͡UIͳͷͰ୭Ͱઃఆ͍͢͠
Slide 19
Slide 19 text
CIAnalyzerͷΞʔΩςΫνϟ • ֤αʔϏεͷAPIΛར༻ͯ͠σʔλΛऔಘ͢Δpullܕ • ύΠϓϥΠϯதͰಛผͳπʔϧΛಈ͔͢ઃఆͷՃෆཁ • ऩूରΛઃఆ༻ͷYAMLʹهࡌ͢Δ • Ͳ͔͜ͷڥͰఆظతʹىಈͰ͖ΕOK • ͓͍ͷCIαʔϏεͷεέδϡʔϧ࣮ߦΛར༻͢Δͷ͕؆୯ • ࣗલͰαʔόʔͷӡ༻͕ෆཁ
Slide 20
Slide 20 text
શମతͳಛ • ͱʹ͔͘ίετʹӡ༻Ͱ͖ͯۀͰ͏োน͕ۃྗͳ͍Α͏ʹઃܭ • ࣗલͰαʔόʔΛӡ༻͢Δඞཁ͕ͳ͍ • ύΠϓϥΠϯͷதͰಛผͳπʔϧΛಈ͔͢ඞཁ͕ͳ͍ • ֎෦αʔϏεʹσʔλΛ͞ͳ͍ͷͰۀͰ͍͍͢
Slide 21
Slide 21 text
μογϡϘʔυΛ࡞ͨ͠ ͜ͱͰՄೳʹͳͬͨ͜ͱ
Slide 22
Slide 22 text
աڈͷϏϧυهΛ શͯḪΕΔ BigQueryͷྗʹΑͬͯաڈͷσʔ λશͯΛදࣔͤͯ࣌ؒ͞΄΅͔ ͔Βͳ͍ ΄ͱΜͲͷCIαʔϏεͰաڈͷه ͍ͬͯΔͷͷɺḪͬͯूܭ͢ Δ͜ͱࠔͳͷͰେ͖ͳϝϦοτ ͱͳΔ iOS/Androidͷ1ؒͷφΠτϦʔϏϧυ ࣦഊͨ͠Ϗϧυɺࣦഊͨ͠εςοϓͷΈߜΓࠐΈ
Slide 23
Slide 23 text
ฏۉతͳϏϧυ࣌ؒ ͷ૿Ճͷਖ਼֬ͳ Ѳ ҆ఆ͢Δϒϥϯνɺޭͨ͠Ϗϧυ͚ͩͰϓ ϩοτ masterϒϥϯνɺφΠτϦʔϏϧυΈ͍ͨ ͳ҆ఆ͍ͯ͠Δ͕݅ϕετ ମײͰͳ͘ɺϲ݄લͱൺֱͯ͠ͲΕ͚ͩ ͕࣌ؒ͘ͳ͍ͬͯΔ͔ਖ਼֬ʹѲͰ͖Δ ۙͰϏϧυ͕࣌ؒڐ༰Ͱ͖ͳ͍Ͱ૿Ճ Ͱ͋ΕૣظʹରࡦΛݕ౼͢Δ iOS/Androidͷ1ؒͷϏϧυ࣌ؒͷਪҠ φΠτϦʔɿΩϟογϡONɺΫϦʔϯɿΩϟογϡOFF
Slide 24
Slide 24 text
CI/CDͷσʔλੵʹΑͬͯ ղܾͰ͖࣮ͨྫհ
Slide 25
Slide 25 text
ಛఆͷεςοϓ͕ੲʹൺͯେ෯ʹ͕͔͔࣌ؒ ΔΑ͏ʹͳ͍ͬͯͨࣄྫ • iOS/AndroidΞϓϦͷϏϧυ࣌ؒվળͷͨΊɺ͕͔͔͍࣌ؒͬͯΔεςοϓΛੳ͍ͯͨ͠ͱ͜ΖGCS ʹΞοϓϩʔυ͍ͯ͠Δεςοϓʹ7͔͔͍ͬͯͨ • ੲͦΜͳʹ͕͔͔͍࣌ؒͬͯͨهԱ͕ͳ͍ͷͰ2ϲ݄·ͰσʔλΛḪͬͯൺֱͨ͠ͱ͜Ζɺ 2ˠ7ʹ৳ͼ͍ͯͨ͜ͱ͕໌ • 1ճͷϏϧυதʹGCSͷΞοϓϩʔυෳճߦ͍ͬͯͨͷͰɺ͋Δδϣϒʹ͓͍ͯશମͷϏϧυ ࣌ؒͷ20%ऑΊͯ͠·͍ͬͯͨ • gsutil rsyncͷࡍʹసૹʹඞཁͳϑΝΠϧΛಛఆ͢Δॲཧ͕࣌ؒϑΝΠϧ૿Ճʹͬͯ৳ͼ͍ͯͨ͜ͱ ͕ݪҼ • gsutil cp ʹஔ͖͑Δ͜ͱͰݩͷ7ˠ30ඵʹ·ͰվળͰ͖ͨ
Slide 26
Slide 26 text
CircleCIͰͷόοΫΤϯυαʔόʔͷϏϧυ͕ كʹࣦഊ͢Δࣄྫ • ͋Δͱ͖͔ΒCircleCIͷϏϧυδϣϒ͕كʹࣦഊɺϦτϥΠ͢ΔͱΔ͜ͱ͋Δͱ͍͏Ṗݱ͕ൃੜ • μογϡϘʔυ্ͰFailedͳδϣϒɺ͞ΒʹFailedʹͳͬͨݪҼͷεςοϓΛௐࠪͯ͠ҎԼΛݪҼΛಛఆ • docker buildதͷίϯύΠϧΤϥʔ • ڊେϦϙδτϦͷgit cloneʹࣦഊ͍ͯ͠Δ • ݪҼ͕2ͭ͋Δ͜ͱɺٯʹͦΕҎ֎ͷݪҼແ͍͜ͱΛಥ͖ࢭΊΒΕͨ͜ͱ͕େ͖͍ • લऀίʔυΛͯ͠Β͍ɺޙऀͷgit cloneݪҼΛಛఆͰ͖ͳ͔ͬͨͷͰCircleCIͷresource_class Λ1ஈ֊্͛ͯΈΔ͜ͱʹ • 1िؒ΄Ͳ༷ࢠݟΛͨ݁͠Ռ࠶ൃ͠ͳ͘ͳͬͨͷͰղܾ
Slide 27
Slide 27 text
ྨࣅαʔϏεͷհ • CIAnalyzerͱࣅͨΑ͏ͳػೳΛఏڙ͍ͯ͠ΔαʔϏεͷհ • ͨͩ͠ɺ͍ͣΕCIAnalyzer΄ͲৄࡉͳੳͰ͖ͳ͍ • Azure Pipelinesʢ࠶ܝʣ • ࣗʹͱͬͯຊՈɻAzureΛ͓͍ͷํͥͻ͓ࢼ͠Λ
Slide 28
Slide 28 text
CircleCIͷInsightsػೳ Ϗϧυ࣌ؒɺޭݟΒΕΔ தԝͱ95%λΠϧʹΑͬͯ֎ΕΛ আ֎Ͱ͖ΔͷૉΒ͍͠ ςετέʔε͝ͱͷޭɺ࣌ؒใ ݟΒΕΔʢ·ͩpreivewػೳʣ εςοϓ͝ͱͷ࣌ؒޭΛݟΒΕ ͳ͍ͷͰݸਓతʹػೳ͕Γͳ͍
Slide 29
Slide 29 text
meercode.io ෳͷCIαʔϏεʹରԠͨ͠μογϡ ϘʔυΛ࡞Ͱ͖ΔαʔϏε Github ActionsBitriseɺͦͷଞͷαʔ Ϗεαϙʔτ Ϗϧυ࣌ؒɺޭɺϦϙδτϦ͝ͱͷ CIαʔϏεͷ༻࣌ؒͳͲ εςοϓ͝ͱͷ࣌ؒੳՄೳ
Slide 30
Slide 30 text
·ͱΊ • CI/CDΛظӡ༻͍ͯ͘͠ͱൃੜ͢Δͷௐࠪίετߴ͍ • Ϗϧυ࣌ؒͷ૿Ճ • ͨ·ʹࣦഊ͢ΔϏϧυ • ϏϧυσʔλΛੳՄೳʹ͢Δ • ࣗ࡞ͨ͠CIAnalyzerͷհ • BigQuery + DataStudioʢDataPortalʣ • ࣮ࡍʹۀͰศརʹ׆༻Ͱ͖͍ͯΔࣄྫͷհ k8s + ίϯςφϏϧυͷCI/CDͷੈքৄ͘͠ͳ͍ͷͰɺ ͜ͷք۾Ͱ͜͏͍͏πʔϧ͕͋Γ·͢Έ͍ͨͳใΛڭ͑ͯΒ͑Δͱخ͍͠Ͱ͢ʂ
Slide 31
Slide 31 text
ࢀߟใ • 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ΛͬͯΔͷ͕ଟ͍
Slide 32
Slide 32 text
ࢀߟใ • CircleCIʢInsightͷυΩϡϝϯτʣ https://circleci.com/docs/2.0/ insights/ • Meercode meercode.io
Slide 33
Slide 33 text
No content