Container/Devops

[Devops] Jenkins, ArgoCD를 통한 CI/CD 구성 - (2) ArgoCD 구성

pepe_ 2024. 3. 7. 21:05

1. 테스트 사전 설명

 

  • 이번 글에서는 ⑥ , ⑦ 번 CD 과정을 설정하는 과정을 설명하였습니다. 
  • 전체적인 테스트 구성 및 ① ~ ⑤ CI 과정은 이전 글을 참고하시길 바랍니다.
 

[Devops] Jenkins, ArgoCD를 통한 CI/CD 구성 - (1) Jenkins 구성

1. 아키텍처 CI 과정 ① Push codes to the repository 애플리케이션 코드 수정 후 dockerimage repository로 git commit 및 push 한다. ② Trigger Job - build image dockerimage repository로 push되면 github webhook을 통해 build image Jo

lilylabs.tistory.com

2. CD 과정

⑥ Sync kubernetesmanifest repo

1) ArgoCD Web 접속 및 로그인

 

2) ArgoCD에서 Github Credentials 설정


  • ArgoCD Web에서 Settings Repositories 클릭

  • CONNECT REPO 클릭

 

  • Git Repository 자격 정보 입력
    • connection method: VIA HTTPS
    • Type: git
    • Project: default
    • Repository URL: ArgoCD와 연결하려는 Git Repository URL
    • Username: Github ID
    • Password: Github Token 

 

3) ArgoCD Sync 구성

  • ArgoCD는 Git 또는 helm만 sync할 수 있다.
  • ArgoCD Web에서 Application → NEW APP 클릭

  • Application을 생성하여 ArgoCD가 AKS Cluster의 리소스를 관리하도록 설정한다.
    • GENERAL
      • Application Name: ArgoCD에서 관리되는 Application 명칭
      • Project: ArgoCD의 논리적 구분 단위
      • Sync Policy: Automatic (동기화 옵션으로 수동 또는 자동 선택)

 

  • SOURCE
    • Repository URL: ArgoCD가 Sync할 Repository URL (Manifest file이 있는 Git Repository)
    • Revision: 기본 main 브랜치가 선택되도록 HEAD 선택
    • Path:Git Repository에 경로가 있을 경우 지정, 없을 경우 ./ 으로 입력

  • DESTINATION
    • Cluster URL: Kubernetes Cluster의 API 서버 주소 지정 (기본적으로 ArgoCD는 설치된 쿠버네티스 클러스터가 타깃 클러스터로 등록)
    • Namespace: 동기화 시 사용할 Kubernetes Cluster의 네임스페이스

  • 설정 완료 후 상단의 Create 클릭

4) 애플리케이션 배포 확인

  • Create를 클릭하면 자동으로 CD가 진행되고 AKS Cluster에 Manifest file에 정의된 pod와 svc가 배포된다.

  • pod와 svc가 정상적으로 배포된 것을 확인할 수 있다.

  • svc의 external-ip로 웹사이트에서 애플리케이션이 정상적으로 동작하는지 확인한다.


⑦ Deploy deployment.yaml to AKS

  • Git repository(dockerimage repository)에 변경된 코드가 push되면 Jenkins의 Job이 자동으로 실행될 수 있도록 Git repository webhook Trigger 를 설정한다.

1) Jenkins의 buildimage job에서 webhook 설정

  •  Jenkins에서 → buildimage job → 구성 클릭

  •  General → GitHub hook trigger for GITScm polling 클릭
    • GitHub hook trigger for GITScm polling: GitHub의 hook trigger를 받으면 빌드 진행

 

2) Github repository(dockerimage repository)에서 webhook 설정

  • dockerimage repository Settings Webhooks Add webhook 클릭

  • webhook 구성 정보를 입력한다.
    • Payload URL: webhook POST request를 받을 서버 URL (http://{Jenkins 서버 주소}:8080/github-webhook/)
    • Content type: application/json 선택 
      • application/json: webhook을 JSON payload로 받음
      • application/x-www-form-urlencoded: webhook을 payload라고 불리는 form parameter로 JSON payload를 보냄

 

3) Github webhook 동작 확인

  • dockerimage repository의 코드 변경 및 변경 사항 commit & push

 

  • Github webhook을 통해 코드가 push되면 Jenkins에 이벤트가 전달되어 buildimage job이 자동으로 실행된다.

 

  • buildimage job이 끝나면 이미지가 ACR로 Push된다.
  • buildimage Job의 빌드 번호가 12 이므로, ACR에 Push 된 이미지의 태그도 12인 것을 확인할 수 있다.

 

  • build image job의 Jenkinsfile에 정의된  'Trigger ManifestUpdate' stage를 통해 updatemanifest Job이 Trigger된다. 
  • updatemanifest Job의 모든 Stage가 성공적으로 끝난 것을 확인한다.

 

  • updatemanifest Job의 Jenkinsfile에 정의된  'Update Git' stage를 통해 kubernetesmanifest repository에 있는 deploymnet.yaml 파일의 이미지 태그 번호가 변경된다.

 

  • ArgoCD는 kubernetesmanifest repository를 주기적으로 sync 하며, 쿠버네티스의 현재 상태와 kubernetesmanifest repository에 선언된 상태를 비교한다.
  • kubernetesmanifest repository의  deploymnet.yaml이 업데이트되면서, ArgoCD가 변경된 deployment.yaml을 AKS에 배포한다.

  • svc의 external-ip로 웹사이트 접속 시 코드 변경 내용이 반영되었는지 확인한다.

 


 

참고

 

[Devops] Jenkins, ArgoCD를 통한 CI/CD 구성 - (1) Jenkins 구성

1. 아키텍처 CI 과정 ① Push codes to the repository 애플리케이션 코드 수정 후 dockerimage repository로 git commit 및 push 한다. ② Trigger Job - build image dockerimage repository로 push되면 github webhook을 통해 build image Jo

lilylabs.tistory.com

 

Private Repositories - Argo CD - Declarative GitOps CD for Kubernetes

Private Repositories Note Some Git hosters - notably GitLab and possibly on-premise GitLab instances as well - require you to specify the .git suffix in the repository URL, otherwise they will send a HTTP 301 redirect to the repository URL suffixed with .g

argo-cd.readthedocs.io