Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
Introduction to CircleCI
Search
yubessy
August 09, 2018
Programming
130
1
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
Introduction to CircleCI
社内勉強会用資料です
yubessy
August 09, 2018
More Decks by yubessy
See All by yubessy
DDIA (Designing Data-Intensive Applications) はいいぞ
yubessy
0
1.6k
Docker Hands-on
yubessy
0
120
Resource Polymorphism
yubessy
0
310
不動点コンビネータ?
yubessy
0
320
とりあえず機械学習したかった
yubessy
0
350
Scala Native
yubessy
0
240
Type Erasure と Reflection のはなし
yubessy
1
490
量子暗号
yubessy
0
250
5分ちょいでわかった気になるラムダアーキテクチャ
yubessy
0
2.3k
Other Decks in Programming
See All in Programming
ビデオ通話が繋がる0.2秒で何が起きているのか
supurazako
2
180
「人を評価する AI」の設計と実装
ryoyanara
0
180
『コードを書く以外の』エンジニアリング〜課金基盤移行プロジェクト推進のためのTips4選
yuriko1211
0
590
変わらないものが、変わるものを決める — 意図駆動開発 × イベントソーシング × イミュータブル | What Doesn't Change Decides What Can — IDD × Event Sourcing × Immutability
tomohisa
0
1.4k
JAWS-UG横浜 #102 AWSサ終供養LT会 成仏できない AWS サービスたち 〜本日、三体供養します〜
maroon1st
0
340
自動化したのに回らないテスト運用の壁ーAI時代の品質責任と生産性
mfunaki
0
130
属人化した知識を、 AIが辿れる地図にする
pkshadeck
PRO
1
150
komatsuna「分散システムにおけるバグ分析手法」
komatsunaqa
0
240
ITヒヤリハットを整理してみた ~ライフサイクルと原因から考える再発防止策~
koukimiura
1
140
Apache Hive: Toward a Cloud Native Lakehouse
okumin
0
180
【やさしく解説 設計編・中級 #6】良いアーキテクチャとは ~ 一本の登り道の、行き先 ~
panda728
PRO
0
210
Terraform標準の組織で AWS CDKをどう使うか
mu7889yoon
1
490
Featured
See All Featured
Utilizing Notion as your number one productivity tool
mfonobong
4
520
Navigating the moral maze — ethical principles for Al-driven product design
skipperchong
2
470
How to build a perfect <img>
jonoalderson
1
5.9k
The Illustrated Children's Guide to Kubernetes
chrisshort
51
53k
Effective software design: The role of men in debugging patriarchy in IT @ Voxxed Days AMS
baasie
0
470
Why You Should Never Use an ORM
jnunemaker
PRO
61
10k
Breaking role norms: Why Content Design is so much more than writing copy - Taylor Woolridge
uxyall
0
360
Context Engineering - Making Every Token Count
addyosmani
9
1k
A better future with KSS
kneath
240
18k
16th Malabo Montpellier Forum Presentation
akademiya2063
PRO
0
340
Tell your own story through comics
letsgokoyo
1
1k
The AI Search Optimization Roadmap by Aleyda Solis
aleyda
1
6k
Transcript
Introduction to CircleCI
Agenda • جૅฤ • CI, CD ͱ • Circle CI
ͷߏཁૉ • جຊతͳ Job, Step ͷ͍ํ • ൃలฤ • ߴͳ Job, Step ͷ͍ํ • ߴͳ Workflow ͷ͍ํ
త ࢦ͢͜ͱ • CI, CD ͱ CircleCI ͷجຊతͳ֓೦Λཧղ͢Δ • CircleCI
2.0 ͷ Job, Step Λ͍͜ͳͤΔΑ͏ʹͳΔ ѻΘͳ͍͜ͱ • CircleCI 1.0 • ݸผͷݴޠɾϑϨʔϜϫʔΫಛ༗ͷ
جૅฤ
Agenda • جૅฤ • CI, CD ͱ • Circle CI
ͷߏཁૉ • جຊతͳ Job, Step ͷ͍ํ • ൃలฤ
CI, CD ͱʁ ιϑτΣΞ։ൃʹ͓͚ΔɺϏϧυɾςετɾϦϦʔεͷΑ͏ͳ Ұ࿈ͷఆܕॲཧΛࣗಈԽʹΑΓܧଓతʹ܁ΓฦͤΔΑ͏ʹ͢Δ͜ͱ • CI = Continuous Integration
= ܧଓతΠϯςάϨʔγϣϯ • ϦϦʔεʹࢸΔ·ͰͷϏϧυɾςετͳͲΛओʹѻ͏ • CD = Continuous Delivery = ܧଓతσϦόϦ • ϦϦʔεͦͷͷʢσϓϩΠɾϚΠάϨʔγϣϯͳͲʣΛओʹѻ͏
CI, CD ͕͋ΔͱԿ͕خ͍͠ʁ CI, CD ͕ͳ͔ͬͨࠒ • Ϗϧυ: Ϗϧυ৬ਓʹຖճґଘؔͷղܾ͔Βґཔ •
ςετ: ςελʔ͕ඦͷखॱͱࢹ֬ೝΛखಈͰ࣮ࢪ • ϦϦʔε: ΠϯϑϥΤϯδχΞ͕ຊ൪ڥͰेͷίϚϯυΛ࣮ߦ CI, CD Λ͏·͘Εɾɾɾ • Ϗϧυɾςετ: ίʔυΛ push ͢Δͱશ෦ࣗಈͰ࣮ߦ • ϦϦʔε: ४උ͕Ͱ͖ͨΒঝೝϘλϯΛԡ͚ͩ͢
CircleCI ͱʁ Ϛωʔδυͷ CI, CD αʔϏε ಛ: • Github ͷ
branch, tag ͷ push ΛىʹҙͷॲཧΛ࣮ߦ • 1.0 -> 2.0 Ͱେ෯ͳΞοϓσʔτ͕͋Γ΄ͱΜͲผ • ݪଇͱͯ͠ίϯςφΛར༻ (VM͑ͳ͍͜ͱͳ͍) • ॲཧݴޠϑϨʔϜϫʔΫʹґଘͤͣࣗͰॻ͘
Agenda • جૅฤ • CI, CD ͱ • Circle CI
ͷߏཁૉ • جຊతͳ Job, Step ͷ͍ํ • ൃలฤ
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: ...
Workflow ॲཧΛ·ͱΊΔ࠷େ͖ͳ୯ҐͰɺͻͱͭҎ্ͷ Job Ͱߏ͞ΕΔ workflows: main: jobs: - test: ...
- deploy: ... ଟ͘ͷ߹ 1 ϨϙδτϦʹ͖ͭ 1 Workflow & 1 Job ͱͳΔ ࣮ྻɾฒྻɾذͳͲ͔ͳΓॊೈͳॲཧ͕Ͱ͖Δ (ൃలฤͰհ)
Job ॱ൪ʹ࣮ߦ͞ΕΔॲཧΛ·ͱΊΔ୯ҐͰɺͻͱͭҎ্ͷ Step Ͱߏ͞ΕΔ jobs: test: docker: - image: circleci/python:3
steps: - checkout - run: python -m unittest - ... ॲཧͷ࣮ߦڥجຊతʹ Docker ίϯςφͰఆٛ͢Δ
Step ॲཧͷ࠷খ͞ͳ୯ҐͰɺ࣍ͷΑ͏ͳ͍͔ͭ͘ͷछྨ͕͋Δ (ൃలฤͰհ) # ϨϙδτϦ͔ΒίʔυΛऔಘ - checkout # ίϚϯυΛ࣮ߦ -
run: <command> # ίϚϯυΛ࣮ߦ (͜ͷΑ͏ʹॻ͘͜ͱͰ͖Δ) - run: name: <name> command: <command> # ίϚϯυΛ࣮ߦ (run ͱ΄΅ಉ͕ͩ͡ฒྻ࣮ߦ͞Εͳ͍) - deploy: <command>
Agenda • جૅฤ • CI, CD ͱ • Circle CI
ͷߏཁૉ • جຊతͳ Job, Step ͷ͍ํ • ൃలฤ
Job Λॻ͖࢝ΊΔલʹ ʮԿ͕ʯࣗಈԽʹඞཁ͔ΛௐΔ • ඞཁͳϥΠϒϥϦͲ͏Πϯετʔϧ͢Δʁ • DBϚΠάϨʔγϣϯ͕ผͰཧ͞Ε͍ͯΔͳΒςετDBΛͲ͏ཱͯΔʁ • ίʔυཧͰ͖ͳ͍ΫϨσϯγϟϧͲ͏ͬͯ͢ʁ ʮຊʹʯࣗಈԽ͖͔͢Λߟ͑Δ
• ϦϦʔε·ͰࣗಈԽ͠ͳ͍ͱ͍͚ͳ͍ͷ͔ʁϏϧυɾςετͰे͔ʁ • ϓϧϦΫϚʔδͰࣗಈϦϦʔε͞Εͯେৎ͔ʁࣦഊ࣌ʹΓͤΔ͔ʁ • ຊ൪ڥʹSSH͢Δඞཁ͕͋Δ͔ʁΫϥυඪ४ͷσϓϩΠαʔϏεΛ͑ͳ͍͔ʁ
͡ΊͷҰา ࠷ॳ 1 Job Ͱ Workflow লུͯ͠Α͍ (͜ΕͰ Job ࣮ߦ͞ΕΔ)
version: 2 jobs: build: docker: - image: circleci/ruby:2.4.1-jessie steps: - checkout - run: echo "A first hello"
Docker ΠϝʔδΛબͿ ࣮ߦڥͱͯ͠͏ Docker ΠϝʔδΑ͘ߟ͑ͯબͿ ֤ Step ͷίϚϯυͻͱͭΊͷίϯςφͰ࣮ߦ͞ΕΔ͜ͱʹҙ docker: #
ެࣜͷ `circleci/ruby` `circleci/mysql` ͳͲΛͳΔ͘͏ - image: circleci/python:3.6.2 # ຊ൪ڥͱόʔδϣϯΛἧ͑Δ - image: circleci/mysql:5.7 # (ಉ্)
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
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 .
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
جૅฤ͜͜·Ͱ ۙͳ circle.yml ΛಡΜͰΈΑ͏
ൃలฤ
Agenda • جૅฤ • ൃలฤ • ߴͳ Job, Step ͷ͍ํ
• ߴͳ Workflow ͷ͍ํ
Workflow, Job, Step ʹ͍ͭͯͷ͓͞Β͍ • Circle CI ͷॲཧ Workflow >
Job > Step ʹ֊Խ͞ΕΔ • Workflow: 1ͭҎ্ͷ Job Λྻɾฒྻɾબɾذ࣮ͯ͠ߦ • Job: 1ͭҎ্ͷ Step Λྻ࣮ߦ • Step: ॲཧͷ࠷খ͍͞୯Ґ • checkout: ίʔυΛϨϙδτϦ͔ΒऔΓग़͢ • run, deploy: ίϚϯυ (γΣϧεΫϦϓτ) Λ࣮ߦ • savecache, restorecache: σΟϨΫτϦΛΩϟογϡͱͯ͠อଘɾಡࠐ
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: ...
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
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
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) Ͳ͏͍͏߹ʹ࣮ߦ͢Δ͔
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
Step: store_artifacts ϏϧυͷՌͳͲΛอଘ͢Δ (ίϯύΠϧݴޠͰ͏) - store_artifacts: path: build/results destination: build-results
Step: persist_to_workspace, attach_workspace ͋Δ Job ͷՌΛޙଓͷผͷ Job Ͱར༻͢Δ persist_to_workspace: root:
dist paths: '*.tar.gz' attach_workspace: at: dist Workflow Ͱෳͷ Job ΛΈ߹ΘͤΔ߹ʹ͏
Agenda • جૅฤ • ൃలฤ • ߴͳ Job, Step ͷ͍ํ
• ߴͳ Workflow ͷ͍ํ
Workflow ͱʁ ෳͷ Job ΛΈ߹ΘͤͯෳࡶͳॲཧϑϩʔΛ࣮ݱ͢Δػೳ • ྻ࣮ߦɾฒྻ࣮ߦ • લͷ Job
ͷՌΛར༻ • Git ͷ branch, tag ʹΑΔϑΟϧλϦϯά • Manual Approval (ਓʹΑΔঝೝ) • Nightly Scheduling (git push ʹΑΒͳ͍ఆظ࣮ߦ)
Workflow: ෳͷ Job ͷఆٛ version: 2 jobs: build: docker: ...
steps: ... test: docker: ... steps: ... workflows: version: 2 build-and-test: jobs: # ͜ͷ··ͩͱ build ͱ test ฒྻ࣮ߦ͞ΕΔ - build - test
Workflow: Job ͷྻ࣮ߦ requires Ͱґଘ͢Δ Job Λࢦఆ͢Δ͜ͱͰྻ࣮ߦͰ͖Δ workflows: version: 2
build-and-test: jobs: - build - test: requires: # build ͕ऴΘ͔ͬͯΒ test Λ࣮ߦ - build
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
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$/ # ਖ਼نදݱ
Workflow: Manual Approval ਓʹΑΔঝೝεςοϓΛڬΉ workflows: version: 2 lint-and-test: jobs: -
lint # lint ຖճ࣮ߦ - approve-test: # test ʹਐΉ͜ͱΛखಈͰঝೝ type: approval requires: - lint - test: # test ͕͔͔࣌ؒΔͷͰঝೝΛඞཁʹ͢Δ requires: - approve-test
Workflow: Nightly Scheduling ಛఆͷ Workflow Λఆظతʹ࣮ߦ workflows: version: 2 health:
triggers: - schedule: # ຖ 00:00 ʹ࣮ߦ cron: "0 0 * * *" jobs: # ੬ऑੑͷνΣοΫͳͲ - check-vulnerability
·ͱΊ Workflow Λ͏ͱͱʹ͔͘৭ʑͳ͜ͱ͕Ͱ͖Δ͕... Workflow ࣗମͷಈ࡞ࣗಈςετͰ͖ͳ͍ͷͰɺෳࡶͳͷΛ࡞Γ͗͢ͳ͍͜ͱ ࢀߟʹͳΔ Workflow Λ୳ͯ͠ΈΑ͏
ࢀߟʹͳΔࢿྉ • CircleCI2.0ͷWorkflowΛࢼͯ͠ΈΔ • CircleCI 2.0Ͱͷεϩʔςετʢςετ͍ʣରॲ๏Λࢥ͍͚ͭͩ͘ॻ͖ग़ ͢ • CircleCI 2.0
ΛlocalͰಈ͔͢