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

GitHub と連携する CI を作る

Shunsuke Maeda
February 21, 2019

GitHub と連携する CI を作る

CI/CD TestNight #3 で発表したスライドです

Shunsuke Maeda

February 21, 2019
Tweet

More Decks by Shunsuke Maeda

Other Decks in Technology

Transcript

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

    View Slide

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

    View Slide

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

    View Slide

  4. طଘͷ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

    View Slide

  5. Continuous Integration

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

  10. ࣮ߦλΠϛϯά

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

  15. ࣮ߦ؀ڥ

    View Slide

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

    View Slide

  17. 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 ΛࢦఆՄೳ

    View Slide

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

    View Slide

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

    View Slide

  20. ࣮ߦ݁Ռ

    View Slide

  21. ࣮ߦ݁Ռ
    • GitHub ͷ Commit Status

    View Slide

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

    View Slide

  23. ׬੒

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

  27. 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

    View Slide

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

    View Slide

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

    View Slide

  30. CIΛ࡞ͬͯΈΑ͏

    View Slide

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

    View Slide