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
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
280
DDoSとの終わりなき戦い2025/endless_battle_with_ddos_attack_2025
takumakume
3
190
事業部CTOの現在地(パネルディスカッション)/Current-location-of-Division-CTO
takumakume
0
220
ロリポップ! for Gamersを支えるインフラ/lolipop for gamers infrastructure
takumakume
0
1.7k
ロリポップ! for Gamersの立ち上げ/lolipop for gamers launch
takumakume
0
3k
ホモグラフドメインを検出してみた/detect homograph domain
takumakume
0
800
ソフトウェアの継続的アップデートをコンテナ化によって加速させる/Accelerate continuous software updates with containerization
takumakume
0
5.6k
KubernetesにおけるSBOMを利用した脆弱性管理/Vulnerability_Management_with_SBOM_in_Kubernetes
takumakume
2
3.1k
Other Decks in Technology
See All in Technology
Agentic AI 時代のテスト手法: Kiro とはじめるプロパティベーステスト (AWS Summit Japan 2026 | DEV212)
ymhiroki
0
180
組織における AI-DLC 実践
askul
0
290
勉強会企画をアプリで構造化してみた 〜そこで見えた、AIとの付き合い方〜 / I've structured a study group plan using an app.
pauli
0
280
從觀望到全公司落地:AI Agentic Coding 導入實戰 — 流程整合與安全治理
appleboy
1
540
Text-to-SQLをAgentCoreで実現し、生成されるSQLの精度を定量的に評価する
yakumo
2
390
GitHub Copilot運用のリアル ~AI Credit時代にどう向き合うか~
takafumisu2uk1
0
600
RAGの精度向上とエージェント活用
kintotechdev
2
120
プライバシー保護の理論と実践
lycorptech_jp
PRO
1
230
Multi-Agent並列開発を 安全に回すための技術 / Technology for Safely Multi-Agent Parallel Development
tooppoo
0
250
知見・人・API・DB・予算 ─ ナイナイ尽くしだった人事データ整備 with dbt、5年間の学び
ken6377
1
130
アラート調査向けAIエージェントの本番導入とその後/AI Agents for Alert Investigation: Production Deployment and After
taddy_919
1
320
Oracle Exadata Database Service on Cloud@Customer X11M (ExaDB-C@C) サービス概要
oracle4engineer
PRO
2
8.3k
Featured
See All Featured
Marketing Yourself as an Engineer | Alaka | Gurzu
gurzu
0
250
Scaling GitHub
holman
464
140k
Exploring the relationship between traditional SERPs and Gen AI search
raygrieselhuber
PRO
2
4.1k
ReactJS: Keep Simple. Everything can be a component!
pedronauck
666
130k
CoffeeScript is Beautiful & I Never Want to Write Plain JavaScript Again
sstephenson
162
16k
New Earth Scene 8
popppiees
3
2.4k
End of SEO as We Know It (SMX Advanced Version)
ipullrank
3
4.2k
ピンチをチャンスに:未来をつくるプロダクトロードマップ #pmconf2020
aki_iinuma
128
56k
How to audit for AI Accessibility on your Front & Back End
davetheseo
0
450
Rebuilding a faster, lazier Slack
samanthasiow
85
9.5k
The World Runs on Bad Software
bkeepers
PRO
72
12k
The Invisible Side of Design
smashingmag
301
52k
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Λ։ൃ͍ͯͬͯ͠Δ
ΫϥυωΠςΟϒͳٕज़ʹڵຯ͕ ͋ΔํੋඇҰॹʹಇ͖·͠ΐ͏ʂ