Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
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
250
Type Erasure と Reflection のはなし
yubessy
1
500
量子暗号
yubessy
0
260
5分ちょいでわかった気になるラムダアーキテクチャ
yubessy
0
2.3k
Other Decks in Programming
See All in Programming
Vue Fes Japan 2026 タイムテーブル徹底解説
448jp
1
580
Ghostty + Neovimで作る 透明でカッコ良い開発環境
j341nono
0
150
ハーネス設計入門 〜 基礎知識の整理から実務へのステップアップ 〜
kinopeee
19
20k
SREの越境 / SRE Collaboration
y0hgi
2
290
AI が書く Go コードの品質を劇的に向上させる Linter: “declscope”
mpyw
0
460
WebRTC映像をAirPlayに対応させる挑戦.pdf
monolithic_adam
0
330
UPDATE をやめる — EF Core でマスタをバージョン管理する
panda728
PRO
0
1k
Intent as Code
shoppingjaws
6
1.1k
iOSDCのペンライトを自動制御したい!
akkeylab
0
320
ゲームコントローラやキーボードのファームウェアをSwiftで書く
kishikawakatsumi
1
270
setup-vp GitLab対応の裏側
naokihaba
0
140
Go × SIMDで高速化するベクトル検索 ~ルーフラインモデルでSIMDが効く境界を探れ! ~
po3rin
1
5.6k
Featured
See All Featured
We Analyzed 250 Million AI Search Results: Here's What I Found
joshbly
1
2k
Producing Creativity
orderedlist
PRO
348
41k
Winning Ecommerce Organic Search in an AI Era - #searchnstuff2025
aleyda
2
2.2k
The AI Revolution Will Not Be Monopolized: How open-source beats economies of scale, even for LLMs
inesmontani
PRO
3
3.7k
The State of eCommerce SEO: How to Win in Today's Products SERPs - #SEOweek
aleyda
2
12k
Building a Modern Day E-commerce SEO Strategy
aleyda
45
9.2k
BBQ
matthewcrist
89
10k
How to build a perfect <img>
jonoalderson
1
6.1k
Become a Pro
speakerdeck
PRO
31
6.3k
Measuring & Analyzing Core Web Vitals
bluesmoon
9
1k
GitHub's CSS Performance
jonrohan
1033
470k
Building Adaptive Systems
keathley
44
3.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Ͱಈ͔͢