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
140
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.7k
Docker Hands-on
yubessy
0
130
Resource Polymorphism
yubessy
0
320
不動点コンビネータ?
yubessy
0
330
とりあえず機械学習したかった
yubessy
0
350
Scala Native
yubessy
0
240
Type Erasure と Reflection のはなし
yubessy
1
490
量子暗号
yubessy
0
260
5分ちょいでわかった気になるラムダアーキテクチャ
yubessy
0
2.3k
Other Decks in Programming
See All in Programming
市販E-Readerを乗っ取れ 〜Embedded Swiftで電子ペーパーガジェットを制御する〜
trickart
0
120
iOS開発×AI駆動開発 〜最近使って便利だったスキルの話〜
nogu66
0
140
LoopHub - ローカルで動く GitHub で、AI と共同開発
jugyo
0
460
Swift愛好会と私(ウホーイ) / Swift Fan Club and Uhooi
uhooi
0
140
新人はどこまで自力でやり、どこからAIに頼るべきか/エンジニア育成に向き合う_先輩たちの悩みと知見共有会
toppan_digital_dev
1
580
20260828_品質と開発生産性を両立させる、AI時代のE2Eテストの考え方
magicpod
0
170
AWS DevOps Agentで インシデント対応をAIに任せたい
honmarkhunt
7
2.5k
ALB ログから Trace を気合で繋げる技術
fohte
7
880
DynamoDBの基礎を振り返りながらベクトル検索機能を理解する
musan
3
270
AI に Inclusive UI を書かせよう — Design Rules Skill で Compose UI を作り直す
theoriatec2024
1
460
AI Agent時代のリアーキテクチャ戦略と実践
hokaccha
1
680
Hono + Inertia + React で LP を構築した話
oukayuka
2
220
Featured
See All Featured
The Art of Delivering Value - GDevCon NA Keynote
reverentgeek
16
2.2k
Leveraging Curiosity to Care for An Aging Population
cassininazir
1
490
The State of eCommerce SEO: How to Win in Today's Products SERPs - #SEOweek
aleyda
2
11k
Code Review Best Practice
trishagee
74
20k
Deep Space Network (abreviated)
tonyrice
0
290
Mozcon NYC 2025: Stop Losing SEO Traffic
samtorres
1
520
For a Future-Friendly Web
brad_frost
183
10k
Discover your Explorer Soul
emna__ayadi
2
1.3k
Bootstrapping a Software Product
garrettdimon
PRO
306
120k
How To Speak Unicorn (iThemes Webinar)
marktimemedia
1
570
Have SEOs Ruined the Internet? - User Awareness of SEO in 2025
akashhashmi
0
490
The #1 spot is gone: here's how to win anyway
tamaranovitovic
3
1.2k
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Ͱಈ͔͢