Slide 1

Slide 1 text

ChatBotͷॏ͍λεΫΛ CircleCIʹ͍࣋ͬͯͬͯΈͨ CircleCIϢʔβʔίϛϡχςΟϛʔ τΞοϓ#8 2020-01-16 ໘ന๏ਓΧϠοΫ @mackee_w 1

Slide 2

Slide 2 text

୭ • macopy, twitter: @mackee_w, GitHub: @mackee • ໘ന๏ਓΧϠοΫ • αʔόαΠυΤϯδχΞ 2

Slide 3

Slide 3 text

͓࿩͍ͨ͜͠ͱ CircleCIͷδϣϒ Ͳ͔͜ΒτϦΨʔ͢Δ͔ 3

Slide 4

Slide 4 text

Ұൠతʹ͸ϦϙδτϦ΁ͷpush 4

Slide 5

Slide 5 text

ChatBot͔ΒδϣϒΛΩοΫ͍ͨ͠ 5

Slide 6

Slide 6 text

ͳͥ => pushʹඥ෇͔ͳ͍λεΫ͕͋Δ • PullRequestͷϨϏϡʔΞαΠϯΨνϟ • Google Spreadsheet͔ΒCSVΛग़ྗͯ͠pushͯ͠ Pull Requestʹ͢Δ • ςετ͕ΊͪΌॏ͍ͷͰ೚ҙͷλΠϛϯάͰςετΛ τϦΨʔ͍ͨ͠ 6

Slide 7

Slide 7 text

ैདྷ͸ChatBotࣗ਎͕΍͍ͬͯͨ • Bot͸PerlͰॻ͔ΕͨSlack RTMΛ͠Ό΂Δ܅ • ΠϕϯτۦಈͰಈ͘ϑϨʔϜϫʔΫ্ʹ৐͍ͬͯΔ • ίϚϯυ͕དྷΔͱλεΫ͕ॻ͔ΕͨεΫϦϓτΛىಈ ͢Δ • ͏͔ͬΓϒϩοΩϯάIOͳίʔυΛॻ͘ͱɺδϣϒ ΛฒߦͰड͚ΒΕͳ͘ͳͬͨΓɺ٧·ͬͯࢮΜͩ 7

Slide 8

Slide 8 text

ChatBot͕ͦͷ··λεΫΛ࣮ߦ͢Δࡍͷ໰୊఺ • ॏ͍λεΫ͕͋Δͱ٧·Δ • ผϓϩηεʹͨ͠Βσόοά͕ҟৗʹ೉͘͠ͳͬͨ • εέʔϧ͠ͳ͍ SPOF • ChatBot͕ॅΉαʔόΛۀ຿࣌ؒதʹམͱͤͳ͍ • ϒϥϯν͝ͱͷλεΫͷඇޓ׵ͷରԠ͕ΊΜͲ͍͘͞ • chatbotͷίʔυͱϒϥϯνͷதͷίʔυͷඇޓ׵ 8

Slide 9

Slide 9 text

CircleCIʹ͍࣋ͬͯ͘ͱ... • λεΫ͕ॏ͍৔߹͸Ωϡʔ͕٧·Δ͕Ωϡʔʹ͸ೖΔ • ແࢹ͞Εͳ͍ • εέʔϧ => ͓ۚΛ෷͑͹͢Δ • ฐࣾ͸Performance PlanΛܖ໿͓ͯ͠Γ·͢ • ϒϥϯν͝ͱͷλεΫඇޓ׵ੑ • ϒϥϯνͷεΫϦϓτΛ࣮ߦ͢Δ͔Βղܾ 9

Slide 10

Slide 10 text

΍Γ͍ͨ͜ͱΛ·ͱΊΔͱ ೚ҙͷλεΫΛ CircleCIͰ ޷͖ͳͱ͖ʹ࣮ߦ͍ͨ͠ʂ 10

Slide 11

Slide 11 text

͜͜ʹAPI͕͋Γ·͢ 11

Slide 12

Slide 12 text

͕ɺ͔͠͠ɺv1.1 API͸... • CircleCI 2.1ʹ͸ະରԠ • workflow΋ະରԠ • ͦ΋ͦ΋3/1ʹ࢖͑ͳ͘ͳΔͦ͏Ͱ͢ • https://circleci.com/blog/a-deprecation-notice- on-job-triggering-with-api-v1-1/ 12

Slide 13

Slide 13 text

͜͜ʹv2 API͕͋Γ·͢ 13

Slide 14

Slide 14 text

v2 APIͷಛ௃ • pipeline parametersͷಋೖ • 2.1 config͔Βಋೖ͞Εͨparametersͷworkflow ʹద༻Ͱ͖Δ൛ • workflow಺ͰjobΛىಈ͢Δͱ͖ͷparametersʹ ࢖͑ͨΓɺpipeline parametersͷঢ়ଶΛݟͯ workflowΛىಈ͢Δ͔ܾΊΒΕΔ 14

Slide 15

Slide 15 text

config.ymlൈਮ workflows: version: 2.1 test: when: << pipeline.parameters.do_test >> jobs: - app_test: filters: branches: only: - /^feature\/.*/ run_task: when: << pipeline.parameters.do_daiku >> jobs: - do_task: taskname: << pipeline.parameters.daiku_task >> 15

Slide 16

Slide 16 text

APIΛ౤͛ͯΈ·͠ΐ͏ my $base_uri = "https://circleci.com/api/v2/project/gh/kayac/project_name/pipeline"; my $circleci_token = $ENV{CIRCLECI_TOKEN}; my $body = encode_json({ branch => $branch, parameters => { do_test => bool(0), do_daiku => bool(1), daiku_task => escape_task_name($job, @args), }, }); http_post "${base_uri}?circle-token=${circleci_token}", $body, headers => { "content-type" => "application/json" }, $cb; 16

Slide 17

Slide 17 text

·ͱΊ • ChatBot͕΍ͬͯͨॏͦ͏ͳλεΫΛCircleCIʹ࣋ͬ ͍ͯͬͨΑ • ͦ΋ͦ΋ChatBot͕΍Δͷʹෆద੾ͳλεΫͩͬͨ Ͷ • CircleCI v2Λ࢖͑͹APIͰworkflowΛenqueueͰ͖Δ Α 17

Slide 18

Slide 18 text

·ͱΊ • ϒϩάͰΞφ΢ϯε͕͋ͬͨΑ https://circleci.com/ blog/introducing-circleci-api-v2/ • ΋ͬͱৄ͍͠࿩͸ͪ͜Β https:// techblog.kayac.com/circleci-api-v2 18