์ค๋ช ์ ํ์์๊ณ ๊ฒฐ๋ก ๋ง ์๊ณ ์ถ์ ๋ถ๋ค์ ์ํ
$ sed "$(grep -n 'image:' nginx.yaml | grep -Eo '^[^:]+')s/nginx:1.0/nginx:2.0/g" nginx.yaml
๋ณธ๋ฌธ์ ๊ธฐ๋ฅ์ด ํ์ํ ์ํฉ ์์
์ ์ด๋ฏธ์ง๋ ๊ฐ๋ฐ์๊ฐ ์ฝ๋๋ฅผ ์ปค๋ฐํ ํ ์๋์ผ๋ก k8s cluster์ ๋ฐฐํฌ๋๊ธฐ ๊น์ง์ ๊ณผ์ ์ ํ์ดํ๋ผ์ธ์ผ๋ก ๋์ํํ ์ด๋ฏธ์ง์ ๋๋ค.
๊ฐ๋ฐ์๊ฐ ์ด์ ์ค์ธ ์๋น์ค์ ์๋ก์ด ๊ธฐ๋ฅ์ ์ถ๊ฐํ๊ฑฐ๋ ๋ฒ๊ทธ๋ฅผ ์์ ํ๋ค๊ณ ๊ฐ์ ํด๋ด ์๋ค. ๊ทธ๋ ๊ฒ ๋ ๊ฒฝ์ฐ GitOpsRepo์ ์๋ ์ปจํ ์ด๋ ์ด๋ฏธ์ง์ ๋ฒ์ ๋ํ ๋ฐ๊ฟ์ฃผ์ด์ผ ํฉ๋๋ค.
๊ทธ๋ ๊ฒ ๋ ๊ฒฝ์ฐ ์ ํจ์ค์์ GitOps Repo์ push๋ฅผ ํ ๋ ์๋กญ๊ฒ ๋ง๋ ์ปจํ ์ด๋ ์ด๋ฏธ์ง์ ๋ฒ์ ์ผ๋ก ์์ ํด์ค์ผ ํฉ๋๋ค. ๊ทธ๋์ผ argoCD์์ git Hook์ ์ธ์งํ๊ณ ์๋กญ๊ฒ ๋ง๋ ์ปจํ ์ด๋ ์ด๋ฏธ์ง๋ฅผ ๊ธฐ๋ฐ์ผ๋ก ํ๋๋ฅผ ์ฌ๋ฐฐํฌํด์คํ ๋๊น์.
์ด๋ด ๋ "ํ์ผ์์ ๋ฌธ์์ด ๊ฒ์ ํ ํ ๊ทธ ๋ฌธ์์ด์ ๋ผ์ธ ๋๋ฒ ๊ฐ์ ธ์ค๊ธฐ" ๊ฐ ํ์๋ก ๋ฉ๋๋ค.
# yaml
images: nginx:1.0
# yaml
images: nginx:2.0
#์ผ๋ก ์์ ํด์ค์ผ ํฉ๋๋ค
์ฒ์์๋ ์ด๋ ๊ฒ ํ์์ต๋๋ค. sed ๋ช ๋ น์ด๋ก "image:"๋ผ๋ ๋จ์ด๋ฅผ ํต์งธ๋ก ์ฐพ์ ํ ๊ทธ ๋ผ์ธ์ ์์ ์๋กญ๊ฒ ๋ฐ๊ฟ์ฃผ์์ฃ .
์ฆ, ๋ผ์ธ ์์ฒด๋ฅผ ๋ฐ๊ฟ์ค๋๋ค. ๋ญ๊ฐ ์ข์๋ณด์ด์ง ์์ต๋๋ค.. ๊ทธ๋ฆฌ๊ณ ์ค์ ๋ก ๋ฒ์ ๊ณผ ์ ์ฅ์ ์ด๋ฆ, ์ปจํ ์ด๋ ์ด๋ฏธ์ง๊น์ง ๋์ ์ผ๋ก ์ง์ ํด์ค์ผ ํ๊ธฐ ๋๋ฌธ์ ํจ์ฌ ์ฝ๋๊ฐ ์ง์ ๋ถํด์ง๋๋ค.
$ sed -i "/image:/c\\ image: nginx:2.0" nginx.yaml
# ์ค์ ๋ก CICD์์ ์ฌ์ฉํ ๋ช
๋ น์ด
$ sed -i "/image:/c\\ image: $(echo $DOCKER_USER_ID)/$(echo $image_name):$(echo $BUILD_NUMBER)" deployment.yaml
๊ทธ๋์ ๋ค๋ฅธ ๋ฐฉ๋ฒ์ ๋ชจ์ํด๋ดค์ต๋๋ค. sed ๋ผ๋ ๋ช ๋ น์ด๋ ํ๋ฒํธ๋ฅผ ์ฃผ๊ฒ๋๋ฉด ๊ทธ ํ๋ฒํธ์์๋ง ์ฐพ๊ฒ๋๋ ๊ธฐ๋ฅ๋ ์์ต๋๋ค. ๋ฐ๋ผ์ ํ๋ฒํธ๋ฅผ ์ฃผ์ด ๊ทธ ํ๋ฒํธ์์๋ง ๋ฌธ์์ด ์นํ์ด ๊ฐ๋ฅํ๋๋ก ํด๋ณด๊ฒ ์ต๋๋ค.
sed -i "ํ๋ฒํธs/๊ธฐ์กด๋ฌธ์์ด/์๋ฌธ์์ด/" ํ์ผ๋ช
์ค์ต์ ์๋ nginx.yaml๋ก ์งํํ๊ฒ ์ต๋๋ค.
apiVersion: apps/v1
kind: Deployment
metadata:
creationTimestamp: null
labels:
app: nginx
name: nginx
spec:
replicas: 1
selector:
matchLabels:
app: nginx
strategy: {}
template:
metadata:
creationTimestamp: null
labels:
app: nginx
spec:
containers:
- image: nginx:1.0 # ์ฌ๊ธฐ๋ฅผ ๋ฐ๊พธ๊ณ ์ถ์ต๋๋ค.
name: nginx
resources: {}
status: {}
์ฐ์ "image:"์ด๋ผ๋ ๋จ์ด๋ฅผ ์ฐพ์ ๊ทธ ๋จ์ด๊ฐ ํฌํจ๋๋ ๋ผ์ธ์ ๋๋ฒ๋ฅผ ์ถ๋ ฅํด์ฃผ๋ ๋ช ๋ น์ด์ ๋๋ค.
$ grep -n "image:" nginx.yaml
ํ์ง๋ง ์ํ๋ ๊ฒ์ "21: - image: nginx:1.0"์ด ์๋๊ณ "21" ํ๋๊ธฐ ๋๋ฌธ์ ์๋์ ๊ฐ์ ๋ช ๋ น์ด๋ฅผ ์ ๋ ฅํด์ค๋๋ค.
$ grep -n 'image:' nginx.yaml | grep -Eo '^[^:]+'
21๋ง ์ถ๋ ฅ๋ฉ๋๋ค. ์ํ๋ ๊ฐ์ ์ฐพ์์ต๋๋ค!!
$ sed -i "ํ๋ฒํธs/๊ธฐ์กด๋ฌธ์์ด/์๋ฌธ์์ด/" ํ์ผ๋ช
๊ทธ๋ผ ์ ๋ช ๋ น์ด๋ฅผ ํ์ฉํด์ ์๋์ ๊ฐ์ด ๋ช ๋ น์ด๋ฅผ ์์ ํด์ฃผ์์ต๋๋ค.
$ sed "$(grep -n 'image:' nginx.yaml | grep -Eo '^[^:]+')s/nginx:1.0/nginx:2.0/g" nginx.yaml
apiVersion: apps/v1
kind: Deployment
metadata:
creationTimestamp: null
labels:
app: nginx
name: nginx
spec:
replicas: 1
selector:
matchLabels:
app: nginx
strategy: {}
template:
metadata:
creationTimestamp: null
labels:
app: nginx
spec:
containers:
- image: nginx:2.0 #์ ๋ฐ๋์์ต๋๋ค.
name: nginx
resources: {}
status: {}
์ฌ์ค ์ ๋ช ๋ น์ด๋ ๊นจ๋ํด๋ณด์ด์ง ์์ง๋ง ํ์คํ ๋งจ์ฒ์ ์ง ์ฝ๋๋ณด๋ค๋ ํจ์ฌ ์์ ์ฑ์ด ์๋ ๋๋์ ๋๋ค. ์ฒ์ ๋ช ๋ น์ด๋ "image:"๋ผ๋ ๋ช ๋ น์ด๋ฅผ ์ ์ญ์์ ์ฐพ๊ณ , ์ฐพ์ ๋จ์ด์ ๋ผ์ธ์ ์ง์๋ฒ๋ฆฌ๊ณ ๋ค์ ์์ฑํ๋ ๊ฑฐ๋๊น ๋์ด์ฐ๊ธฐ๊ฐ ์ค์ํ yaml์์๋ ์นํ๋๋ ๊ณผ์ ์์ ์๋ฌ๊ฐ ๋ฐ์ํ ์๋ ์์ต๋๋ค.
์ฆ, ๋ฑ ๋ฒ์ ๋ง ์ฐพ์ ๋ฐ๊พธ๊ฒ ๋๋๊น ํจ์ฌ ์์ ์ฑ์ด ์์ด๋ณด์ ๋๋ค!!