Slide 1

Slide 1 text

Introduction to CircleCI

Slide 2

Slide 2 text

Agenda • جૅฤ • CI, CD ͱ͸ • Circle CI ͷߏ੒ཁૉ • جຊతͳ Job, Step ͷ࢖͍ํ • ൃలฤ • ߴ౓ͳ Job, Step ͷ࢖͍ํ • ߴ౓ͳ Workflow ͷ࢖͍ํ

Slide 3

Slide 3 text

໨త ໨ࢦ͢͜ͱ • CI, CD ͱ CircleCI ͷجຊతͳ֓೦Λཧղ͢Δ • CircleCI 2.0 ͷ Job, Step Λ࢖͍͜ͳͤΔΑ͏ʹͳΔ ѻΘͳ͍͜ͱ • CircleCI 1.0 • ݸผͷݴޠɾϑϨʔϜϫʔΫಛ༗ͷ࿩

Slide 4

Slide 4 text

جૅฤ

Slide 5

Slide 5 text

Agenda • جૅฤ • CI, CD ͱ͸ • Circle CI ͷߏ੒ཁૉ • جຊతͳ Job, Step ͷ࢖͍ํ • ൃలฤ

Slide 6

Slide 6 text

CI, CD ͱ͸ʁ ιϑτ΢ΣΞ։ൃʹ͓͚ΔɺϏϧυɾςετɾϦϦʔεͷΑ͏ͳ Ұ࿈ͷఆܕॲཧΛࣗಈԽʹΑΓܧଓతʹ܁ΓฦͤΔΑ͏ʹ͢Δ͜ͱ • CI = Continuous Integration = ܧଓతΠϯςάϨʔγϣϯ • ϦϦʔεʹࢸΔ·ͰͷϏϧυɾςετͳͲΛओʹѻ͏ • CD = Continuous Delivery = ܧଓతσϦόϦ • ϦϦʔεͦͷ΋ͷʢσϓϩΠɾϚΠάϨʔγϣϯͳͲʣΛओʹѻ͏

Slide 7

Slide 7 text

CI, CD ͕͋ΔͱԿ͕خ͍͠ʁ CI, CD ͕ͳ͔ͬͨࠒ • Ϗϧυ: Ϗϧυ৬ਓʹຖճґଘؔ܎ͷղܾ͔Βґཔ • ςετ: ςελʔ͕਺ඦͷखॱͱ໨ࢹ֬ೝΛखಈͰ࣮ࢪ • ϦϦʔε: ΠϯϑϥΤϯδχΞ͕ຊ൪؀ڥͰ਺ेͷίϚϯυΛ࣮ߦ CI, CD Λ͏·͘΍Ε͹ɾɾɾ • Ϗϧυɾςετ: ίʔυΛ push ͢Δͱશ෦ࣗಈͰ࣮ߦ • ϦϦʔε: ४උ͕Ͱ͖ͨΒঝೝϘλϯΛԡ͚ͩ͢

Slide 8

Slide 8 text

CircleCI ͱ͸ʁ Ϛωʔδυͷ CI, CD αʔϏε ಛ௃: • Github ͷ branch, tag ͷ push Λى఺ʹ೚ҙͷॲཧΛ࣮ߦ • 1.0 -> 2.0 Ͱେ෯ͳΞοϓσʔτ͕͋Γ΄ͱΜͲผ෺ • ݪଇͱͯ͠ίϯςφΛར༻ (VM΋࢖͑ͳ͍͜ͱ͸ͳ͍) • ॲཧ͸ݴޠ΍ϑϨʔϜϫʔΫʹґଘͤͣࣗ෼Ͱॻ͘

Slide 9

Slide 9 text

Agenda • جૅฤ • CI, CD ͱ͸ • Circle CI ͷߏ੒ཁૉ • جຊతͳ Job, Step ͷ࢖͍ํ • ൃలฤ

Slide 10

Slide 10 text

Workflow, Job, Step: ॲཧͷ֊૚Λ੒͢ཁૉ Ұ࿈ͷॲཧ͸ Workflow, Job, Step ͷॱʹ֊૚Խ͞ΕΔ workflows: main: jobs: - test: ... - deploy: ... jobs: test: docker: - image: circleci/python:3 steps: - checkout - run: python -m unittest deploy: ...

Slide 11

Slide 11 text

Workflow ॲཧΛ·ͱΊΔ࠷΋େ͖ͳ୯ҐͰɺͻͱͭҎ্ͷ Job Ͱߏ੒͞ΕΔ workflows: main: jobs: - test: ... - deploy: ... ଟ͘ͷ৔߹͸ 1 ϨϙδτϦʹ͖ͭ 1 Workflow & 1 Job ͱͳΔ ࣮͸௚ྻɾฒྻɾ෼ذͳͲ͔ͳΓॊೈͳॲཧ͕Ͱ͖Δ (ൃలฤͰ঺հ)

Slide 12

Slide 12 text

Job ॱ൪ʹ࣮ߦ͞ΕΔॲཧΛ·ͱΊΔ୯ҐͰɺͻͱͭҎ্ͷ Step Ͱߏ੒͞ΕΔ jobs: test: docker: - image: circleci/python:3 steps: - checkout - run: python -m unittest - ... ॲཧͷ࣮ߦ؀ڥ͸جຊతʹ Docker ίϯςφͰఆٛ͢Δ

Slide 13

Slide 13 text

Step ॲཧͷ࠷΋খ͞ͳ୯ҐͰɺ࣍ͷΑ͏ͳ͍͔ͭ͘ͷछྨ͕͋Δ (ൃలฤͰ΋঺հ) # ϨϙδτϦ͔ΒίʔυΛऔಘ - checkout # ίϚϯυΛ࣮ߦ - run: # ίϚϯυΛ࣮ߦ (͜ͷΑ͏ʹॻ͘͜ͱ΋Ͱ͖Δ) - run: name: command: # ίϚϯυΛ࣮ߦ (run ͱ΄΅ಉ͕ͩ͡ฒྻ࣮ߦ͞Εͳ͍) - deploy:

Slide 14

Slide 14 text

Agenda • جૅฤ • CI, CD ͱ͸ • Circle CI ͷߏ੒ཁૉ • جຊతͳ Job, Step ͷ࢖͍ํ • ൃలฤ

Slide 15

Slide 15 text

Job Λॻ͖࢝ΊΔલʹ ʮԿ͕ʯࣗಈԽʹඞཁ͔Λௐ΂Δ • ඞཁͳϥΠϒϥϦ͸Ͳ͏Πϯετʔϧ͢Δʁ • DBϚΠάϨʔγϣϯ͕ผͰ؅ཧ͞Ε͍ͯΔͳΒςετDBΛͲ͏ཱͯΔʁ • ίʔυ؅ཧͰ͖ͳ͍ΫϨσϯγϟϧ͸Ͳ͏΍ͬͯ౉͢ʁ ʮຊ౰ʹʯࣗಈԽ͢΂͖͔Λߟ͑Δ • ϦϦʔε·ͰࣗಈԽ͠ͳ͍ͱ͍͚ͳ͍ͷ͔ʁϏϧυɾςετͰे෼͔ʁ • ϓϧϦΫϚʔδͰࣗಈϦϦʔε͞Εͯେৎ෉͔ʁࣦഊ࣌ʹ੾Γ໭ͤΔ͔ʁ • ຊ൪؀ڥʹSSH͢Δඞཁ͕͋Δ͔ʁΫϥ΢υඪ४ͷσϓϩΠαʔϏεΛ࢖͑ͳ͍͔ʁ

Slide 16

Slide 16 text

͸͡ΊͷҰา ࠷ॳ͸ 1 Job Ͱ Workflow ͸লུͯ͠΋Α͍ (͜ΕͰ΋ Job ͸࣮ߦ͞ΕΔ) version: 2 jobs: build: docker: - image: circleci/ruby:2.4.1-jessie steps: - checkout - run: echo "A first hello"

Slide 17

Slide 17 text

Docker ΠϝʔδΛબͿ ࣮ߦ؀ڥͱͯ͠࢖͏ Docker Πϝʔδ͸Α͘ߟ͑ͯબͿ ֤ Step ͷίϚϯυ͸ͻͱͭΊͷίϯςφͰ࣮ߦ͞ΕΔ͜ͱʹ஫ҙ docker: # ެࣜͷ `circleci/ruby` ΍ `circleci/mysql` ͳͲΛͳΔ΂͘࢖͏ - image: circleci/python:3.6.2 # ຊ൪؀ڥͱόʔδϣϯΛἧ͑Δ - image: circleci/mysql:5.7 # (ಉ্)

Slide 18

Slide 18 text

Step Λద੾ͳ·ͱ·ΓͰ۠੾Δ # ͻͱ·ͱ·Γͷॲཧ͝ͱʹ Step Λ࡞໊ͬͯલΛ͚ͭΔ - run: name: ؀ڥߏங command: | python -m venv .venv source .venv/bin/activate pip install -r requirements.txt - run: name: ίʔυͷ੩తղੳ command: | source .venv/bin/activate pep8 . pyflakes . - run: name: ςετ command: | source .venv/bin/activate unittest . # test

Slide 19

Slide 19 text

Step Λద੾ͳ·ͱ·ΓͰ۠੾Δ # ྑ͘ͳ͍ྫ: શ෦·ͱΊΔ - run: name: CI command: | python -m venv .venv source .venv/bin/activate pip install -r requirements.txt pep8 . pyflakes . unittest . # ྑ͘ͳ͍ྫ: 1ίϚϯυͣͭશ෦෼͚Δ - run: pip install -r requirements.txt - run: pep8 . - run: pyflakes . - run: unittest .

Slide 20

Slide 20 text

Cache Λదٓར༻͢Δ ϥΠϒϥϦͷΠϯετʔϧύεͳͲΛΩϟογϡ͓ͯ͘͠ͱศར (ൃలฤͰ΋঺հ) - restore_cache: # Ωϟογϡ͋Ε͹͔ͦ͜ΒσΟϨΫτϦͷ಺༰Λ෮ݩ key: requirements-{{ checksum "requirements.txt" }} - run: # ࣮ߦ͞ΕΔ͕σΟϨΫτϦ͕෮ݩ͞Ε͍ͯΕ͹࣮࣭తʹԿ΋ى͖ͳ͍ name: setup venv and pip install command: | python -m venv .venv source .venv/bin/activate pip install -r requirements.txt - save_cache: # σΟϨΫτϦͷ಺༰ΛΩϟογϡͱͯ͠อଘ key: requirements-{{ checksum "requirements.txt" }} paths: - .venv

Slide 21

Slide 21 text

جૅฤ͸͜͜·Ͱ ਎ۙͳ circle.yml ΛಡΜͰΈΑ͏

Slide 22

Slide 22 text

ൃలฤ

Slide 23

Slide 23 text

Agenda • جૅฤ • ൃలฤ • ߴ౓ͳ Job, Step ͷ࢖͍ํ • ߴ౓ͳ Workflow ͷ࢖͍ํ

Slide 24

Slide 24 text

Workflow, Job, Step ʹ͍ͭͯͷ͓͞Β͍ • Circle CI ͷॲཧ͸ Workflow > Job > Step ʹ֊૚Խ͞ΕΔ • Workflow: 1ͭҎ্ͷ Job Λ௚ྻɾฒྻɾબ୒ɾ෼ذ࣮ͯ͠ߦ • Job: 1ͭҎ্ͷ Step Λ௚ྻ࣮ߦ • Step: ॲཧͷ࠷΋খ͍͞୯Ґ • checkout: ίʔυΛϨϙδτϦ͔ΒऔΓग़͢ • run, deploy: ίϚϯυ (γΣϧεΫϦϓτ) Λ࣮ߦ • savecache, restorecache: σΟϨΫτϦΛΩϟογϡͱͯ͠อଘɾಡࠐ

Slide 25

Slide 25 text

Job: ઃఆ߲໨Ұཡ jobs: build: docker: # ࢖༻͢Δ Docker Πϝʔδ - image: circleci/ruby:2.4.1 environment: # ؀ڥม਺ FOO: bar parallelism: 2 # ฒྻ౓ resource_class: medium # CPU, RAM ͷεϖοΫ working_directory: /my-app # ϫʔΩϯάσΟϨΫτϦ branches: # ϒϥϯνϑΟϧλ only: - master steps: ...

Slide 26

Slide 26 text

Job: parallelism ʹΑΔฒྻԽ 1. parallelism Λ 2 Ҏ্ʹ͢Δ 2. ฒྻ࣮ߦ͍ͨ͠ॲཧΛ circleci tests ίϚϯυͰฒྻԽ͢Δ parallelism: 2 steps: - run: command: | circleci tests glob "spec/**/*_spec.rb" > list.txt circleci tests split list.txt | xargs bundle exec rspec

Slide 27

Slide 27 text

Job: circleci tests ͷղઆ جຊతʹ͸ϑΝΠϧͷϦετͷऩूͱ෼ׂΛ͢Δ͚ͩͷίϚϯυ $ circleci tests glob "spec/**/*_spec.rb" > list.txt $ cat list.txt spec/test1_spec.rb spec/test2_spec.rb spec/test3_spec.rb spec/test4_spec.rb $ circleci tests split list.txt spec/test1_spec.rb spec/test2_spec.rb spec/test3_spec.rb spec/test4_spec.rb

Slide 28

Slide 28 text

Step: run ͷઃఆ߲໨ run: name: rspec # Webίϯιʔϧʹදࣔ͞ΕΔεςοϓ໊ command: bundle exec rspec # ίϚϯυ಺༰ shell: bash -lc # ίϚϯυΛ࣮ߦ͢ΔγΣϧ environment: # ؀ڥม਺ FOO: bar working_directory: /my-app # ϫʔΩϯάσΟϨΫτϦ background: false # όοΫάϥ΢ϯυ࣮ߦ͢Δ͔൱͔ no_output_timeout: 1m # Ұఆ࣌ؒԿ΋ग़ྗ͕ͳ͚Ε͹λΠϜΞ΢τ when: # (always, on_success, on_fail) Ͳ͏͍͏৔߹ʹ࣮ߦ͢Δ͔

Slide 29

Slide 29 text

Step: save_cache, restore_cache (࠶ܝ) ϥΠϒϥϦͷΠϯετʔϧͳͲͷ࣌ؒΛ୹ॖ - restore_cache: # Ωϟογϡ͋Ε͹͔ͦ͜ΒσΟϨΫτϦͷ಺༰Λ෮ݩ key: requirements-{{ checksum "requirements.txt" }} - run: # ࣮ߦ͞ΕΔ͕σΟϨΫτϦ͕෮ݩ͞Ε͍ͯΕ͹࣮࣭తʹԿ΋ى͖ͳ͍ name: setup venv and pip install command: | python -m venv .venv source .venv/bin/activate pip install -r requirements.txt - save_cache: # σΟϨΫτϦͷ಺༰ΛΩϟογϡͱͯ͠อଘ key: requirements-{{ checksum "requirements.txt" }} paths: - .venv

Slide 30

Slide 30 text

Step: store_artifacts Ϗϧυͷ੒Ռ෺ͳͲΛอଘ͢Δ (ίϯύΠϧݴޠ౳Ͱ࢖͏) - store_artifacts: path: build/results destination: build-results

Slide 31

Slide 31 text

Step: persist_to_workspace, attach_workspace ͋Δ Job ͷ੒Ռ෺Λޙଓͷผͷ Job Ͱར༻͢Δ persist_to_workspace: root: dist paths: '*.tar.gz' attach_workspace: at: dist Workflow Ͱෳ਺ͷ Job Λ૊Έ߹ΘͤΔ৔߹ʹ࢖͏

Slide 32

Slide 32 text

Agenda • جૅฤ • ൃలฤ • ߴ౓ͳ Job, Step ͷ࢖͍ํ • ߴ౓ͳ Workflow ͷ࢖͍ํ

Slide 33

Slide 33 text

Workflow ͱ͸ʁ ෳ਺ͷ Job Λ૊Έ߹ΘͤͯෳࡶͳॲཧϑϩʔΛ࣮ݱ͢Δػೳ • ௚ྻ࣮ߦɾฒྻ࣮ߦ • લͷ Job ͷ੒Ռ෺Λར༻ • Git ͷ branch, tag ʹΑΔϑΟϧλϦϯά • Manual Approval (ਓʹΑΔঝೝ) • Nightly Scheduling (git push ʹΑΒͳ͍ఆظ࣮ߦ)

Slide 34

Slide 34 text

Workflow: ෳ਺ͷ Job ͷఆٛ version: 2 jobs: build: docker: ... steps: ... test: docker: ... steps: ... workflows: version: 2 build-and-test: jobs: # ͜ͷ··ͩͱ build ͱ test ͸ฒྻ࣮ߦ͞ΕΔ - build - test

Slide 35

Slide 35 text

Workflow: Job ͷ௚ྻ࣮ߦ requires Ͱґଘ͢Δ Job Λࢦఆ͢Δ͜ͱͰ௚ྻ࣮ߦͰ͖Δ workflows: version: 2 build-and-test: jobs: - build - test: requires: # build ͕ऴΘ͔ͬͯΒ test Λ࣮ߦ - build

Slide 36

Slide 36 text

Workflow: લͷ Job ͷ੒Ռ෺Λར༻ build ͷ੒Ռ෺Λ test Ͱ࢖͏ = persist_to_workspace, attach_workspace jobs: build: steps: - persist_to_workspace: # dist/ ҎԼͷ *.tar.gz ϑΝΠϧΛอଘ root: dist paths: '*.tar.gz' test: steps: - attach_workspace: # อଘ͞Εͨ dist/ ҎԼͷϑΝΠϧΛಡࠐ at: dist

Slide 37

Slide 37 text

Workflow: Git ͷ branch, tag ʹΑΔϑΟϧλϦϯά ಛఆͷ໊લͷ branch ΍ tag ͷ৔߹͚ͩ Job Λ࣮ߦ͍ͨ͠৔߹ workflows: version: 2 test-and-deploy: jobs: - test - deploy: requires: # test ͕ऴΘ͔ͬͯΒ deploy Λ࣮ߦ - test filters: branches: # master ͷ৔߹ͷΈ deploy Λ࣮ߦ only: /^master$/ # ਖ਼نදݱ

Slide 38

Slide 38 text

Workflow: Manual Approval ਓʹΑΔঝೝεςοϓΛڬΉ workflows: version: 2 lint-and-test: jobs: - lint # lint ͸ຖճ࣮ߦ - approve-test: # test ʹਐΉ͜ͱΛखಈͰঝೝ type: approval requires: - lint - test: # test ͸͕͔͔࣌ؒΔͷͰঝೝΛඞཁʹ͢Δ requires: - approve-test

Slide 39

Slide 39 text

Workflow: Nightly Scheduling ಛఆͷ Workflow Λఆظతʹ࣮ߦ workflows: version: 2 health: triggers: - schedule: # ຖ೔ 00:00 ʹ࣮ߦ cron: "0 0 * * *" jobs: # ੬ऑੑͷνΣοΫͳͲ - check-vulnerability

Slide 40

Slide 40 text

·ͱΊ Workflow Λ࢖͏ͱͱʹ͔͘৭ʑͳ͜ͱ͕Ͱ͖Δ͕... Workflow ࣗମͷಈ࡞͸ࣗಈςετͰ͖ͳ͍ͷͰɺෳࡶͳ΋ͷΛ࡞Γ͗͢ͳ͍͜ͱ ࢀߟʹͳΔ Workflow Λ୳ͯ͠ΈΑ͏

Slide 41

Slide 41 text

ࢀߟʹͳΔࢿྉ • CircleCI2.0ͷWorkflowΛࢼͯ͠ΈΔ • CircleCI 2.0Ͱͷεϩʔςετʢςετ஗͍ʣ໰୊ରॲ๏Λࢥ͍͚ͭͩ͘ॻ͖ग़ ͢ • CircleCI 2.0 ΛlocalͰಈ͔͢