Skip to content

GitOps with Jenkins & ArgoCD

Notifications You must be signed in to change notification settings

earlgrey02/gitops-chart

Folders and files

NameName
Last commit message
Last commit date

Latest commit

ย 

History

10 Commits
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 
ย 

Repository files navigation

GitOps with Jenkins & ArgoCD

Jenkins์™€ ArgoCD๋ฅผ ํ†ตํ•ด ๊ตฌ์ถ•ํ•ด๋ณด๋Š” GitOps ๊ธฐ๋ฐ˜ CI / CD ํŒŒ์ดํ”„๋ผ์ธ

๋ณธ ์ €์žฅ์†Œ๋Š” Jenkins์™€ ArgoCD๋ฅผ ํ™œ์šฉํ•ด ๊ตฌ์ถ•ํ•œ GitOps CI / CD ํŒŒ์ดํ”„๋ผ์ธ์— ๋Œ€ํ•œ Helm ์ฐจํŠธ ์ €์žฅ์†Œ์ด๋‹ค.

Description

GitOps

GitOps๋Š” Kubernetes์˜ ํŠน์ง•์ธ ์ฝ”๋“œํ˜• ์ธํ”„๋ผ(Infrastructure as Code, IaC)์™€ Git์˜ ํ˜•์ƒ ๊ด€๋ฆฌ๋ฅผ ๊ฒฐํ•ฉํ•˜์—ฌ ํด๋ผ์šฐ๋“œ ๋„ค์ดํ‹ฐ๋ธŒ ํ™˜๊ฒฝ์„ ํšจ์œจ์ ์œผ๋กœ ๊ด€๋ฆฌํ•˜๋Š” DevOps์˜ ๊ตฌํ˜„ ๋ฐฉ๋ฒ• ์ค‘ ํ•˜๋‚˜์ด๋‹ค.
Kubernets์˜ ๋งค๋‹ˆํŽ˜์ŠคํŠธ(Manifest)๋“ค์„ GitHub ๋ ˆํฌ์ง€ํ† ๋ฆฌ์— ์ €์žฅํ•ด ์ธํ”„๋ผ์— ๋Œ€ํ•œ ๋ฒ„์ „ ๊ด€๋ฆฌ๊ฐ€ ๊ฐ€๋Šฅํ•˜๊ฒŒ ๋œ๋‹ค.
๊ฒŒ๋‹ค๊ฐ€ Terraform ๋“ฑ์˜ ํ”„๋กœ๋น„์ €๋‹(Provisioning) ๋„๊ตฌ๊นŒ์ง€ ํ•จ๊ป˜ ์‚ฌ์šฉํ•˜๋ฉด ํด๋ผ์šฐ๋“œ๋ถ€ํ„ฐ ํด๋ผ์šฐ๋“œ ๋‚ด์˜ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๋ฐฐํฌ๊นŒ์ง€ Git์„ ํ†ตํ•ด ๊ด€๋ฆฌํ•˜๊ณ  ์–ธ์ œ๋“ ์ง€ ๋ณต๊ตฌํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋œ๋‹ค.

CI / CD

์ผ๋ฐ˜์ ์œผ๋กœ GitOps๋Š” Kubernetes์˜ ์ง€์†์  ๋ฐฐํฌ ๋„๊ตฌ ์ค‘ ํ•˜๋‚˜์ธ ArgoCD๋ฅผ ํ™œ์šฉํ•ด ๊ตฌํ˜„ํ•  ์ˆ˜ ์žˆ๋‹ค.
์ด๋•Œ, ๋งค๋‹ˆํŽ˜์ŠคํŠธ๋“ค์˜ ๊ด€๋ฆฌ๋ฅผ ํŽธ๋ฆฌํ•˜๊ฒŒ ํ•˜๊ธฐ ์œ„ํ•ด Helm์„ ํ•จ๊ป˜ ์‚ฌ์šฉํ–ˆ๋‹ค.

๋‹ค์Œ ์ ˆ์ฐจ๋Š” ArgoCD์— CI / CD ๋„๊ตฌ์ธ Jenkins๋ฅผ ํ•จ๊ป˜ ์‚ฌ์šฉํ•ด ๊ตฌ์ถ•ํ•œ GitOps CI / CD ํŒŒ์ดํ”„๋ผ์ธ์ด๋‹ค.

  1. ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๋ ˆํฌ์ง€ํ† ๋ฆฌ์˜ ๋ณ€๊ฒฝ์‚ฌํ•ญ์„ ๊ฐ์ง€ํ•œ Jenkins๊ฐ€ ํ•ด๋‹น ๋ ˆํฌ์ง€ํ† ๋ฆฌ๋ฅผ ์ƒˆ๋กœ ๊ฐ€์ ธ์˜ด.
  2. ์—…๋ฐ์ดํŠธ๋œ ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์˜ ์ƒˆ๋กœ์šด ์ด๋ฏธ์ง€ ๋นŒ๋“œ
  3. ๋งŒ๋“ค์–ด์ง„ ์ด๋ฏธ์ง€๋ฅผ ์ปจํ…Œ์ด๋„ˆ ๋ ˆ์ง€์ŠคํŠธ๋ฆฌ์— ๊ฒŒ์‹œ
  4. ์ฐจํŠธ ๋ ˆํฌ์ง€ํ† ๋ฆฌ ๋‚ด์˜ ํ•ด๋‹นํ•˜๋Š” ์ด๋ฏธ์ง€ ํƒœ๊ทธ๋ฅผ ์ƒˆ๋กœ ๊ฒŒ์‹œํ•œ ์ด๋ฏธ์ง€์˜ ํƒœ๊ทธ๋กœ ์ˆ˜์ •
  5. ์ฐจํŠธ ๋ ˆํฌ์ง€ํ† ๋ฆฌ์˜ ๋ณ€๊ฒฝ์‚ฌํ•ญ์„ ๊ฐ์ง€ํ•œ ArgoCD๊ฐ€ ํ•ด๋‹น ๋ ˆํฌ์ง€ํ† ๋ฆฌ๋ฅผ ์ƒˆ๋กœ ๊ฐ€์ ธ์˜ด.
  6. ์—…๋ฐ์ดํŠธ๋œ ์ฐจํŠธ๋ฅผ Kubernetes ํด๋Ÿฌ์Šคํ„ฐ์— ๋ฐฐํฌ
  7. kubelet์ด ํ•ด๋‹น ์ฐจํŠธ์— ๋งž๋Š” ์ƒˆ๋กœ์šด ์ด๋ฏธ์ง€๋ฅผ ๊ฐ€์ ธ์™€ ์ปจํ…Œ์ด๋„ˆ ๊ตฌ์ถ• ๋ฐ ์‹คํ–‰

์ด๋•Œ, ํด๋Ÿฌ์Šคํ„ฐ์— ๋ฌธ์ œ๊ฐ€ ๋ฐœ์ƒํ•ด ๋กค๋ฐฑ(Rollback)์„ ์ˆ˜ํ–‰ํ•˜๊ณ  ์‹ถ๋‹ค๋ฉด ๋‹จ์ˆœํžˆ ์ฐจํŠธ ๋ ˆํฌ์ง€ํ† ๋ฆฌ์— ๋Œ€ํ•ด git revert๋ฅผ ์ˆ˜ํ–‰ํ•˜๋ฉด ๋œ๋‹ค.
์ด๋ ‡๊ฒŒ ์ธํ”„๋ผ์— ๋Œ€ํ•ด ๋ฒ„์ „ ๊ด€๋ฆฌ๋ฅผ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ๊ณ  ์ด๋Ÿฌํ•œ ๋ฒ„์ „ ๊ด€๋ฆฌ๋ฅผ ๊ฐœ๋ฐœ์ž๋“ค์—๊ฒŒ ์นœ์ˆ™ํ•œ ํ˜•์ƒ ๊ด€๋ฆฌ ๋„๊ตฌ์ธ Git์œผ๋กœ ํ•œ๋‹ค๋Š” ์ ์ด GitOps์˜ ํฐ ์žฅ์  ์ค‘ ํ•˜๋‚˜์ด๋‹ค.

How to use

> git clone https://github.com/earlgrey02/gitops-chart
> cd gitops-chart
> helm dependencies update 
> helm install gitops .

๋ณธ ๋ ˆํฌ์ง€ํ† ๋ฆฌ๋ฅผ ํ†ตํ•ด Nginx Ingress Controller, Jenkins, ArgoCD๋ฅผ Helm์œผ๋กœ ํ•œ ๋ฒˆ์— ๊ตฌ์ถ•ํ•  ์ˆ˜ ์žˆ๋‹ค.

> kubectl get service -n ingress-nginx
NAME                              TYPE       CLUSTER-IP     EXTERNAL-IP   PORT(S)                      AGE
gitops-ingress-nginx-controller   NodePort   10.103.83.33   <none>        80:32748/TCP,443:30083/TCP   13m

์ฐจํŠธ ๋‚ด์˜ Nginx Ingress Controller๋Š” NodePort ํƒ€์ž…์„ ์‚ฌ์šฉํ•˜๋ฏ€๋กœ ํ•ด๋‹นํ•˜๋Š” ํฌํŠธ์™€ ํ•จ๊ป˜ ๊ฐ๊ฐ /jenkins, /argocd๋กœ ์ ‘์†ํ•˜๋ฉด Jenkins์™€ ArgoCD์˜ ๋Œ€์‹œ๋ณด๋“œ์— ์ ‘์†ํ•  ์ˆ˜ ์žˆ๋‹ค.
Jenkins์™€ ArgoCD๋Š” ๋ชจ๋‘ admin๊ณผ root๋ฅผ ์•„์ด๋””, ํŒจ์Šค์›Œ๋“œ๋กœ ๊ฐ€์ง€๊ณ  ์žˆ๋‹ค.

apiVersion: v1
kind: Secret
metadata:
  name: argocd-notifications-secret
  namespace: {{ index .Values "argo-cd" "namespaceOverride" }}
type: Opaque
stringData:
  discord-url: <Webhook URL>

ArgoCD๋Š” example-application.yaml์„ Application์œผ๋กœ ๊ฐ€์ง€๊ณ  ์žˆ๋Š”๋ฐ ํ•ด๋‹น Application์ด ๋™๊ธฐํ™”๋  ๋•Œ๋งˆ๋‹ค ์•Œ๋ฆผ์ด ๊ฐ€๋„๋ก ์„ค์ •๋˜์–ด ์žˆ๋‹ค.
๋งŒ์•ฝ ์‹ค์ œ๋กœ ์•Œ๋ฆผ์„ ๋ฐ›๊ณ  ์‹ถ๋‹ค๋ฉด ์œ„ secret.yaml์— ์‹ค์ œ Discord์˜ ์›นํ›…(Webhook) URL์„ ์ž‘์„ฑํ•˜๋ฉด ๋œ๋‹ค.

About

GitOps with Jenkins & ArgoCD

Topics

Resources

Stars

Watchers

Forks

Languages