Slide 1

Slide 1 text

GitHub ͱ࿈ܞ͢Δ CI Λ࡞Δ CI/CD Test Night 2019.02.21 [THU] Shunsuke Maeda (@duck8823)

Slide 2

Slide 2 text

ࣗݾ঺հ • @duck8823 • ॴଐ • גࣜձࣾΤεɾΤϜɾΤε • ιϑτ΢ΣΞΤϯδχΞ • झຯ • duck8823/duci

Slide 3

Slide 3 text

GitHub ͱ࿈ܞ͢Δ CI Λ࡞Δ • https://github.com/duck8823/duci

Slide 4

Slide 4 text

طଘͷCIͷਏ͍ͱ͜Ζ • ઃఆϑΝΠϧ • CircleCI / TravisCI / Jenkins.. • *.yml / Jenkinsfile (= Groovy based DSL) • ϩʔΧϧͰͷ࠶ݱ౓ͷ௿͞ 05443d6 Fix ci setting ce8332d Fix ci setting 8c155fa Fix ci setting e6c24e0 Fix ci setting

Slide 5

Slide 5 text

Continuous Integration

Slide 6

Slide 6 text

Continuous Integration • ఆظతʹ • Ϗϧυ΍ςετΛ࣮ߦ ͢Δ͜ͱͰ • ૣظʹ ϑΟʔυόοΫ Λಘͯ όά͕ຊ൪؀ڥʹࠞೖ͢ΔͷΛ๷͙

Slide 7

Slide 7 text

CIͰߟ͑Δඞཁ͕͋Δ͜ͱ • ఆظతʹ • ࣮ߦλΠϛϯά • Ϗϧυ΍ςετΛ࣮ߦ • ࣮ߦ؀ڥ • ϑΟʔυόοΫ • ࣮ߦ݁Ռ

Slide 8

Slide 8 text

CIͷߏ੒ • ࣮ߦλΠϛϯά • ࣮ߦ؀ڥ • ࣮ߦ݁Ռ Λૄͳ࡞Γʹ͓ͯ͘͠ͱॊೈ

Slide 9

Slide 9 text

CIͷߏ੒(ࠓճ • ࣮ߦλΠϛϯά • GitHub ͷ Webhook • ࣮ߦ؀ڥ • Docker x λεΫϥϯφʔ • ࣮ߦ݁Ռ • GitHub ͷ Commit Status / ϩάUI

Slide 10

Slide 10 text

࣮ߦλΠϛϯά

Slide 11

Slide 11 text

࣮ߦλΠϛϯά • GitHub ͷ Webhook https://github.com///settings/hooks • ೚ҙͷλΠϛϯάͰ Payload Λඈ͹͢ • ඇಉظͰϨεϙϯεΛฦ͞ͳ͍ͱ Timeout

Slide 12

Slide 12 text

GitHub ͷ Webhook • Event ͱ Action ͷ૊Έ߹ΘͤͰλΠϛϯά੍ޚ • Event • Webhookͷछྨ (Header: X-GitHub-Event) ྫ. push, issue_comment, pull_request • Action • Eventຖͷࡉ͔͍छྨ (JSON payload) ྫ. created, opened, synchronize

Slide 13

Slide 13 text

Fork ͨ͠ϦϙδτϦ͔Βͷ Pull Request • push ΠϕϯτͰ͸औಘͰ͖ͳ͍ => pull_request Πϕϯτͷ synchronize Ͱऔಘ

Slide 14

Slide 14 text

Pull Request ͷίϝϯτ • issue_comment ͰऔಘՄೳ • Payload ʹ͸ pull_request ͷ৘ใ͕ͳ͍ (※ head branch/commit ͳͲ) => GitHub API Ͱऔಘ

Slide 15

Slide 15 text

࣮ߦ؀ڥ

Slide 16

Slide 16 text

࣮ߦ؀ڥ • Docker • ϗετΛԚ͞ͳ͍ • ϩʔΧϧ / CI Ͱͷಈ࡞ʹ࠶ݱੑΛͱΓ΍͍͢ • ϦϙδτϦ্ͷ Dockerfile Λར༻

Slide 17

Slide 17 text

Dockerfile FROM golang:1.11.5-alpine RUN apk --update add --no-cache alpine-sdk COPY . . ENTRYPOINT ["make"] # λεΫϥϯφʔͷίϚϯυ ྫ. ./gradlew, mvn CMD ["test"] # σϑΥϧτͷλεΫ • docker build ͱ docker run Λ࣮ߦ • issue_comment ͷ৔߹͸ CMD ΛࢦఆՄೳ

Slide 18

Slide 18 text

ϩʔΧϧͰͷ࣮ߦ ಉ͡ Dockerfile ͰϩʔΧϧͰಈ࡞֬ೝ͕Ͱ͖Δ docker build -t job -f path/to/Dockerfile . docker run --rm job [CMD]

Slide 19

Slide 19 text

ϗετͷϦιʔε͸༗ݶ • ฒྻ਺ͱλΠϜΞ΢τ • Golang ͷ goroutine ͱ context ͕૬ੑ͕Α͍ (࣮૷͕ؾʹͳΔํ͸) https://github.com/duck8823/duci/blob/master/ application/service/executor/executor.go

Slide 20

Slide 20 text

࣮ߦ݁Ռ

Slide 21

Slide 21 text

࣮ߦ݁Ռ • GitHub ͷ Commit Status

Slide 22

Slide 22 text

݁Ռͷৄࡉ ϩάͷอଘͱදࣔ - Commit Status ʹৄࡉϦϯΫΛ͚ͭΔ͜ͱ͕Ͱ͖Δ

Slide 23

Slide 23 text

׬੒

Slide 24

Slide 24 text

Έͳ͞Μ͕։ൃ͠ɺGitHubͰ࣮ߦ https://github.blog/jp/2018-10-24-action-demos/

Slide 25

Slide 25 text

Why not using GitHub Actions? A. ࢖͍ͬͯ·͢

Slide 26

Slide 26 text

GitHub Actions ͷΠέͯΔͱ͜Ζ GITHUB_TOKEN Λ෷͍ग़ͯ͘͠ΕΔ = Personal Access Token (Bot Account) ͕͍Βͳ͍

Slide 27

Slide 27 text

GitHub Actions ͷ࣮ߦλΠϛϯά (Event • Event ͷछྨ͸ Webhook ͱجຊతʹ͸ಉ͡ • GitHub Actions https://developer.github.com/actions/creating- workflows/workflow-configuration-options/#events- supported-in-workflow-files • Webhooks https://developer.github.com/webhooks/#events

Slide 28

Slide 28 text

GitHub Actions ͷ࣮ߦλΠϛϯά (Action • Webhook ͷ Payload ͱಉ౳ͷ JSON ͕഑ஔ͞ΕΔ ؀ڥม਺ GITHUB_EVENT_PATH • ެࣜͷ Filter • action Ͱ filter actions/bin

Slide 29

Slide 29 text

·ͱΊ • CI͸࡞ΕΔ • ࣮ߦλΠϛϯά / ࣮ߦ؀ڥ / ࣮ߦ݁Ռ • GitHub Actions ΋͍͍ͧ • CIΛ࡞ͬͨ஌ࣝ͸࢖͑Δ

Slide 30

Slide 30 text

CIΛ࡞ͬͯΈΑ͏

Slide 31

Slide 31 text

͓·͚ Danger Λ GitHub Actions Ͱ࢖͑ΔΑ͏ʹ͠·ͨ͠ • Pull Request ͷνΣοΫΛࣗಈԽ͢ΔͨΊͷج൫ = Pull Request ϧʔϧͷίʔυԽ