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
GitOpsで実現するPull Request毎のプレビュー環境/Preview enviro...
Search
Sponsored
·
Ship Features Fearlessly
Turn features on and off without deploys. Used by thousands of Ruby developers.
→
Takuma Kume
September 28, 2021
Technology
2.3k
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
GitOpsで実現するPull Request毎のプレビュー環境/Preview environment for each Pull Request by GitOps
Takuma Kume
September 28, 2021
More Decks by Takuma Kume
See All by Takuma Kume
SRE/インフラエンジニアの市場価値とキャリアパス/Market value and career path for SRE-infrastructure engineers
takumakume
2
1.5k
【新卒研修】共通言語としてのSRE/SRE as a common language
takumakume
0
290
DDoSとの終わりなき戦い2025/endless_battle_with_ddos_attack_2025
takumakume
3
190
事業部CTOの現在地(パネルディスカッション)/Current-location-of-Division-CTO
takumakume
0
230
ロリポップ! for Gamersを支えるインフラ/lolipop for gamers infrastructure
takumakume
0
1.7k
ロリポップ! for Gamersの立ち上げ/lolipop for gamers launch
takumakume
0
3k
ホモグラフドメインを検出してみた/detect homograph domain
takumakume
0
810
ソフトウェアの継続的アップデートをコンテナ化によって加速させる/Accelerate continuous software updates with containerization
takumakume
0
5.7k
KubernetesにおけるSBOMを利用した脆弱性管理/Vulnerability_Management_with_SBOM_in_Kubernetes
takumakume
2
3.2k
Other Decks in Technology
See All in Technology
シンガポールで登壇してきます
yama3133
0
120
Empower GenAI with Agile - あなたのアジャイルが生成AIのバフになる仕組み
hageyahhoo
1
180
Terraform共通モジュールをチーム横断で“変えられる”運用へ ― リリースと適用の分離
kekke_n
1
2.9k
AIと共生する開発者プラットフォーム:バクラクのモノレポ×マイクロサービス基盤
sakajunquality
2
3.5k
Genie Ontologyは銀の弾丸かを考える / Is Genie Ontology a Silver Bullet?
nttcom
0
260
Control Planeで育てるBtoB SaaSの認証基盤 - SRE NEXT 2026
pokohide
1
2.3k
個人開発で育てる「大規模設計の苗床」 - AI時代の1人開発から始める業務への知識接続 / The Seedbed for Large-Scale Design - From AI-Era Solo Projects to Professional Knowledge
bitkey
PRO
1
180
知らん間に、回ってる
ming_ayami
0
570
しくみを学んで使いこなそう GitHub Copilot app
torumakabe
2
240
「最後に責任を取るのはチーム」— 人間のPRレビューを最小化してアップデートしたメンタルモデル
jnishime_dresscode
0
620
あなたの『Site』はどこですか? — xREという考え方
miyamu
0
1.2k
脱金融のフューチャー・デザイン / Future Design Beyond Finance
ks91
PRO
0
150
Featured
See All Featured
Navigating Weather and Climate Data
rabernat
0
320
Building the Perfect Custom Keyboard
takai
2
810
Music & Morning Musume
bryan
47
7.3k
The Invisible Side of Design
smashingmag
301
52k
Keith and Marios Guide to Fast Websites
keithpitt
413
23k
HTML-Aware ERB: The Path to Reactive Rendering @ RubyCon 2026, Rimini, Italy
marcoroth
2
320
Designing Experiences People Love
moore
143
24k
Building Applications with DynamoDB
mza
96
7.1k
Paper Plane (Part 1)
katiecoart
PRO
0
9.6k
A Soul's Torment
seathinner
6
3.1k
Visualizing Your Data: Incorporating Mongo into Loggly Infrastructure
mongodb
49
10k
Building Adaptive Systems
keathley
44
3.1k
Transcript
1FQBCP5FDI$POGFSFODF (JU0QTͰ࣮ݱ͢Δ1VMM3FRVFTUຖͷ ϓϨϏϡʔڥ
(.0ϖύϘגࣜձࣾ ϗεςΟϯάࣄۀ෦ 43&νʔϜ ࠷͍ۙͬͯΔ͜ͱ ΞϓϦͷίϯςφԽLTͷಋೖ $%։ൃମݧͷ্ ٱถഅ!UBLVNBLVNF
ࠓճհ͢Δͷ ΞϓϦέʔγϣϯ ϦϙδτϦ LVCFSOFUFT Ϋϥελ Branch-A Branch-B Branch-A Branch-B 13࡞
13࡞ branch-a.example.com branch-b.example.com (JU0QTͰ࣮ݱ͢Δ1VMM3FRVFTUຖͷϓϨϏϡʔڥ
࣍ w։ൃܦҢ wϓϨϏϡʔڥͷղઆ wࠓޙͷ՝ w·ͱΊ
։ൃܦҢ
։ൃܦҢ wϦϦʔεલʹڞ༻ͷTUBHJOHڥʹΞϓϦέʔγϣϯΛσϓϩΠ ͯ͠ಈ࡞֬ೝΛߦ͏։ൃϑϩʔʹ͓͚Δ՝ wσϓϩΠߦҝ͕ඞཁͰखؒͰ͋Δ wڥʹݶΓ͕͋Γɺར༻͕ͪൃੜ͢Δ͜ͱ͕͋Δ wڞ༻Ώ͑ʹɺڥΛҰ࣌తʹઐ༗͢Δ͜ͱʹਫ਼ਆతϋʔυϧ͕ ͋Δ
1VMM3FRVFTUຖʹڥΛ ੜ͢Δ͜ͱͰ՝ղܾΛ͢Δ
ΞϓϦέʔγϣϯ ϦϙδτϦ LVCFSOFUFT Ϋϥελ Branch-A Branch-B Branch-A Branch-B 13࡞ 13࡞
branch-a.example.com branch-b.example.com ϓϨϏϡʔڥͷղઆ
ϓϨϏϡʔڥͷղઆɿલఏ "QQ3FQP 4ZTUFN.BOJGFTUT3FQP $POUBJOFS3FHJTUSZ ,VCFSOFUFT$MVTUFS ιʔείʔυ LVCFSOFUFTNBOJGFTUT LVCFSOFUFTNBOJGFTUT "SHP$% ֤"QQ3FQPͷ"SHP$%$POpH
*OHSFTT$POUSPMMFSʜ ArgoCD ΞϓϦͷίϯςφΠϝʔδ ArgoCD Image Updater "SHP$%ͰNBOJGFTUTͷ$%Λ͍ͯ͠Δ "SHP$%*NBHF6QEBUFSͰΠϝʔδͷ $%Λ͍ͯ͠Δ ϓϨϏϡʔڥͷղઆͷલʹɺϦϙδτϦͷߏͱ$%ʹ͍ͭͯ
ϓϨϏϡʔڥͷղઆɿશମ૾ "QQ3FQP 4ZTUFN.BOJGFTUT3FQP $POUBJOFS3FHJTUSZ ,VCFSOFUFT$MVTUFS Github Actions branch-a Github Actions
13࡞ App Image ίϯςφΠϝʔδͷ#VJME1VTI SFQPTJUPSZ@EJTQBUDI 13τϦΨʔͰΠϝʔδͷϏϧυͱ"SHP$%ͷઃఆΛੜ͢Δ CSBODIB༻ͷ"SHP$%ͷઃఆΛੜ HJUDPNNJUQVTI
ϓϨϏϡʔڥͷղઆɿશମ૾ "QQ3FQP 4ZTUFN.BOJGFTUT3FQP $POUBJOFS3FHJTUSZ ,VCFSOFUFT$MVTUFS Github Actions branch-a Github Actions
13࡞ App Image ίϯςφΠϝʔδͷ#VJME1VTI SFQPTJUPSZ@EJTQBUDI CSBODIB༻ͷ"SHP$%ͷઃఆΛੜ "SHP$%͕ݕ͠ϒϥϯνͷڥΛσϓϩΠ͢Δ ArgoCD CSBODIBͷڥΛੜ BQQCSBODIB CSBODIB༻ͷ"SHP$%ͷઃఆΛ"QQMZ CSBODIBͷNBOJGFTUTͷಉظΛ։࢝ %FQMPZNFOU 4FSWJDFʜ มߋΛݕ HJUDPNNJUQVTI
ϓϨϏϡʔڥͷղઆɿશମ૾ "QQ3FQP 4ZTUFN.BOJGFTUT3FQP $POUBJOFS3FHJTUSZ ,VCFSOFUFT$MVTUFS Github Actions branch-a Github Actions
13࡞ App Image ίϯςφΠϝʔδͷ#VJME1VTI SFQPTJUPSZ@EJTQBUDI CSBODIB༻ͷ"SHP$%ͷઃఆΛੜ "SHP$%*NBHF6QEBUFSͰ࠷৽ͷΠϝʔδΛద༻͢Δ ArgoCD มߋΛݕ CSBODIBͷڥΛੜ BQQCSBODIB CSBODIB༻ͷ"SHP$%ͷઃఆΛ"QQMZ CSBODIBͷNBOJGFTUTͷಉظΛ։࢝ %FQMPZNFOU 4FSWJDFʜ ArgoCD Image Updater ࠷৽ͷΠϝʔδΛద༻͢Δ มߋΛݕ ίϯςφΠϝʔδͷ#VJME1VTI ϒϥϯν1VTI͢Δʹ࣮ߦ HJUDPNNJUQVTI
ϓϨϏϡʔڥͷղઆɿશମ૾ "QQ3FQP 4ZTUFN.BOJGFTUT3FQP $POUBJOFS3FHJTUSZ ,VCFSOFUFT$MVTUFS Github Actions branch-a Github Actions
13࡞ App Image ίϯςφΠϝʔδͷ#VJME1VTI SFQPTJUPSZ@EJTQBUDI CSBODIB༻ͷ"SHP$%ͷઃఆΛੜ ArgoCD มߋΛݕ CSBODIBͷڥΛੜ BQQCSBODIB CSBODIB༻ͷ"SHP$%ͷઃఆΛ"QQMZ CSBODIBͷNBOJGFTUTͷಉظΛ։࢝ %FQMPZNFOU 4FSWJDFʜ ArgoCD Image Updater ࠷৽ͷΠϝʔδΛద༻͢Δ มߋΛݕ ίϯςφΠϝʔδͷ#VJME1VTI HJUDPNNJUQVTI
ϓϨϏϡʔڥͷղઆɿશମ૾ wҰݟෳࡶʹݟ͑Δ͕ʜ w13τϦΨʔͰ(JUIVC"DUJPOTΛͬͯɺ"SHP$%ͷઃఆΛࣗಈ ੜͯ͠ϦϙδτϦʹ1VTI͍ͯ͠Δ wͦΕҎ֎ɺ"SHP$%*NBHF6QEBUFS͕ͬͯ͘ΕΔ
"SHP$%ͷઃఆͷੜ "QQ3FQP 4ZTUFN.BOJGFTUT3FQP $POUBJOFS3FHJTUSZ ,VCFSOFUFT$MVTUFS Github Actions branch-a Github Actions
13࡞ App Image ίϯςφΠϝʔδͷ#VJME1VTI SFQPTJUPSZ@EJTQBUDI CSBODIB༻ͷ"SHP$%ͷઃఆΛੜ ArgoCD มߋΛݕ CSBODIBͷڥΛੜ BQQCSBODIB CSBODIB༻ͷ"SHP$%ͷઃఆΛ"QQMZ CSBODIBͷNBOJGFTUTͷಉظΛ։࢝ %FQMPZNFOU 4FSWJDFʜ ArgoCD Image Updater ࠷৽ͷΠϝʔδΛద༻͢Δ มߋΛݕ ίϯςφΠϝʔδͷ#VJME1VTI HJUDPNNJUQVTI
"SHP$%ͷઃఆͷੜ wBSHPDEBENJOBQQHFOFSBUFTQFDίϚϯυͰઃఆΛੜͯ͠Ϧ ϙδτϦʹ1VTI͍ͯ͠Δ $ argocd admin app generate-spec sample-app-pr-1 \
--dest-server https://kubernetes.default.svc \ --dest-namespace sample-app-pr-1 \ --path manifests/preview \ --repo https://github.com/takumakume/sample-app \ --revision branch-1 \ --sync-policy auto \ --sync-option Prune=true \ --sync-option CreateNamespace=true apiVersion: argoproj.io/v1alpha1 kind: Application metadata: name: sample-app-pr-1 spec: destination: namespace: sample-app-pr-1 server: https://kubernetes.default.svc source: path: manifests/preview repoURL: https://github.com/takumakume/sample-app targetRevision: branch-1 syncPolicy: … wੜʹඞཁͳύϥϝʔλΛ(JUIVC"DUJPOͰ͍ͯ͠Δ sample-app-pr-1.yaml
"SHP$%ͷઃఆͷੜ apiVersion: argoproj.io/v1alpha1 kind: Application metadata: name: sample-app-pr-1 spec: source:
path: manifests/preview repoURL: https://github.com/takumakume/sample-app targetRevision: branch-1 destination: namespace: sample-app-pr-1 server: https://kubernetes.default.svc syncPolicy: - CreateNamespace=true … ϓϨϏϡʔڥͷNBOJGFTUTͷσ ΟϨΫτϦΛ 13ຖͷ/BNFTQBDFʹల։ /BNFTQBDFࣗಈੜ w୯ҰͷNBOJGFTUTΛ֤ͬͯ13ͷڥΛએݴతʹੜͰ͖Δ sample-app-pr-1.yaml
"QQ*NBHFͷߋ৽ "QQ3FQP 4ZTUFN.BOJGFTUT3FQP $POUBJOFS3FHJTUSZ ,VCFSOFUFT$MVTUFS Github Actions branch-a Github Actions
13࡞ App Image ίϯςφΠϝʔδͷ#VJME1VTI SFQPTJUPSZ@EJTQBUDI CSBODIB༻ͷ"SHP$%ͷઃఆΛੜ ArgoCD มߋΛݕ CSBODIBͷڥΛੜ BQQCSBODIB CSBODIB༻ͷ"SHP$%ͷઃఆΛ"QQMZ CSBODIBͷNBOJGFTUTͷಉظΛ։࢝ %FQMPZNFOU 4FSWJDFʜ ArgoCD Image Updater ࠷৽ͷΠϝʔδΛద༻͢Δ มߋΛݕ ίϯςφΠϝʔδͷ#VJME1VTI HJUDPNNJUQVTI
"QQ*NBHFͷߋ৽ wϒϥϯνʹHJUQVTI͢Δʹɺ13൪߸ͱίϛοτϋογϡͰߏ ͞ΕΔλάΛ༩ͯ͠ΠϝʔδΛQVTI͍ͯ͠Δ wTBNQMFBQQQSFDFE w"SHP$%ͷઃఆΛੜ͢Δஈ֊Ͱ*NBHF6QEBUFSͷઃఆΛ༩ apiVersion: argoproj.io/v1alpha1 kind: Application metadata:
name: sample-app-pr-1 annotations: argocd-image-updater.argoproj.io/image-list: sample-app=takumakume/sample-app:^pr-1 argocd-image-updater.argoproj.io/sample-app.update-strategy: latest argocd-image-updater.argoproj.io/sample-app.ignore-tags: latest argocd-image-updater.argoproj.io/sample-app.allow-tags: regexp:^pr-1-[0-9a-f]{5,40}$ ... ࠷৽ͷlQSίϛοτϋογϡzͳΠϝʔδΛద༻͢Δ
ϓϨϏϡʔڥͷղઆɿڥͷআ "QQ3FQP 4ZTUFN.BOJGFTUT3FQP ,VCFSOFUFT$MVTUFS Github Actions Pull Request Github Actions
$MPTFPS.FSHF SFQPTJUPSZ@EJTQBUDI CSBODIB༻ͷ"SHP$%ͷઃఆΛআ ArgoCD আΛݕ CSBODIBͷڥΛআ BQQCSBODIB CSBODIB༻ͷ"SHP$%ͷઃఆΛআ %FQMPZNFOU 4FSWJDFʜ HJUDPNNJUQVTI apiVersion: argoproj.io/v1alpha1 kind: Application metadata: name: sample-app-pr-1 finalizers: - resources-finalizer.argocd.argoproj.io … "QQMJDBUJPOϦιʔεআ࣌ʹͦͷڥΛআ͢Δ
ϓϨϏϡʔڥͷղઆɿڥͷΞΫηε ΞϓϦέʔγϣϯ ϦϙδτϦ LVCFSOFUFT Ϋϥελ Branch-A Branch-B Branch-A Branch-B 13࡞
13࡞ branch-a.example.com branch-b.example.com *OHSFTTΛͬͯެ։͍ͯ͠Δ
ϓϨϏϡʔڥͷղઆɿڥͷΞΫηε apiVersion: networking.k8s.io/v1 kind: Ingress metadata: name: app-ingress namespace: app
spec: rules: - host: staging-app.example.com http: paths: - backend: service: name: app-svc port: number: 8080 path: / pathType: Prefix tls: - hosts: - staging-app.example.com secretName: app-tls staging-app.example.com staging-app.example.com ίί ίί w*OHSFTTΛ͏߹ͷ՝ w୯ҰͷNBOJGFTUTΛෳͷϓϨϏϡʔ ڥʹར༻͢ΔͨΊɺ*OHSFTTIPTUͷ ॻ͖͕͑ඞཁ wNBOJGFTUTੜ࣌ʹεΫϦϓτͰॻ ͖͑ΔࣄͰ͖Δ͕ɺཧ͕ࡶͱ ͳΔ
ϓϨϏϡʔڥͷղઆɿڥͷΞΫηε wUBLVNBLVNFTFSWJDFFYQPTFPQFSBUPS wࢦఆͨ͠4FSWJDFΛެ։͢Δ*OHSFTTΛࣗಈੜ͢Δ0QFSBUPS w4&37*$&@/".&/".&41"$&FYBNQMFDPN wࣗಈͰ*OHSFTTIPTUΛׂΓͯΔ͜ͱ͕Ͱ͖Δ wLVCFSOFUFT4FSWJDF%JTDPWFSZͷ*OHSFTT൛ͷΑ͏ͳػೳ wએݴతʹಈతͳϗετ໊Ͱ*OHSFTTΛੜͰ͖Δ
apiVersion: service-expose.../v1alpha1 kind: ServiceExpose metadata: name: example namespace: ns1 spec:
backend: service: name: example-svc port: number: 8080 domain: example.com path: / pathType: Prefix tlsEnable: true tlsSecretName: example-tls annotations: cert-manager.io/cluster-issuer: letsencrypt apiVersion: networking.k8s.io/v1 kind: Ingress metadata: name: example namespace: ns1 annotations: cert-manager.io/cluster-issuer: letsencrypt spec: rules: - host: example-svc.ns1.example.com http: paths: - backend: service: name: example-svc port: number: 8080 path: / pathType: Prefix tls: - hosts: - example-svc.ns1.example.com secretName: example-tls backend: service: name: example-svc port: number: 8080 example-svc ns1 example.com example-svc ns1 example.com example-svc ns1 example.com ެ։͢Δ4FSWJDF αʔϏεσΟεΧόϦతͳ ϗετ໊ΛࣗಈͰ༩ αʔϏε໊ namespace υϝΠϯ UBLVNBLVNFTFSWJDFFYQPTFPQFSBUPS
IUUQTTQFBLFSEFDLDPNUBLVNBLVNFHPLVCFSOFUFTPQFSBUPS LVCFSOFUFTPQFSBUPSͷৄ͍࣮͠༰ʹ͍ͭͯҎԼ
ϓϨϏϡʔڥͷղઆɿڥͷΞΫηε w4FSWJDF&YQPTFʹΑͬͯੜ͞Εͨ*OHSFTTͷϗετ໊ʹରͯ͠ wFYUFSOBMEOT"Ϩίʔυͷࣗಈઃఆ wDFSUNBOBHFS5-4ূ໌ॻͷࣗಈઃఆ
ࠓޙͷ՝
ࠓޙͷ՝ wίʔυ1VTI͔Βڥͷөྃͷ௨͕͔Γʹ͍͘ w"SHP$%/PUJpDBUJPOTͰεςʔλεΛ4MBDL௨͍ͯ͠Δ
ࠓޙͷ՝ wίʔυ1VTI͔Βڥͷөྃͷ௨͕͔Γʹ͍͘ ɹʢଓ͖ʣ wͲͷίϛοτ·ͰϓϨϏϡʔڥͷίϯςφʹө͍ͯ͠Δ͔ ͕͔Γʹ͍͘ wݫີʹ࣮ߦதͷίϯςφͷΠϝʔδλάΛݟΔ͔͠ͳ͍ wར༻ऀॻ͍ͨίʔυ͕ѱ͍ͷ͔ɺڥʹөͯ͠ͳ͍ͷ͔ அʹ໎͏Մೳੑ͕͋Δ
ࠓޙͷ՝ wίʔυ1VTI͔Βڥͷө·ͰͷλΠϜϥά͕ͦͦ͋͜͜Δ wΞϓϦͷ$*Λ1BTT wίϯςφΠϝʔδͷ#VJMEˍ1VTI w"SHP$%*NBHF6QEBUFS͕ݕ࣮͠ߦதͷίϯςφͷΠϝʔδ Λߋ৽ wίϯςφΠϝʔδͷ1VMM wίϯςφͷϩʔϧΞτ
·ͱΊ w13ͷ࡞ΛτϦΨʔʹಈ࡞֬ೝ༻ͷϓϨϏϡʔڥΛ LVCFSOFUFT্ʹࣗಈੜ͍ͯ͠Δ w"SHP$%ͷઃఆϑΝΠϧΛੜˍϦϙδτϦʹ1VTI͢Δ͚ͩͰ ͍݁ͯ͠Δ wϒϥϯνʹΞϓϦͷίʔυΛ1VTI͢ΔʹΠϝʔδΛ #VJME1VTIͯ͠"SHP$%*NBHF6QEBUFSͰڥΛߋ৽͍ͯ͠Δ wϗετ໊Λ4FSWJDF%JTDPWFSZతʹੜ͠ɺ*OHSFTTͰެ։͢Δ 0QFSBUPSΛ։ൃ͍ͯͬͯ͠Δ
ΫϥυωΠςΟϒͳٕज़ʹڵຯ͕ ͋ΔํੋඇҰॹʹಇ͖·͠ΐ͏ʂ