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에서 Git Repository에 있는 Manifest file을 사용하여 AKS로 배포한다.
- 이때, Private Repositories인 경우 사전에 Github Credentials을 구성해야 한다.
- 참고 사이트: https://argo-cd.readthedocs.io/en/stable/user-guide/private-repositories/
- 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 (동기화 옵션으로 수동 또는 자동 선택)
- GENERAL
- 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
'Container > Devops' 카테고리의 다른 글
[Devops] Argo Rollouts를 이용한 Blue/Green 배포 (0) | 2024.03.15 |
---|---|
[Devops] CI/CD 배포 전략 - Rolling, Blue/Green, Canary (0) | 2024.03.08 |
[Devops] Jenkins, ArgoCD를 통한 CI/CD 구성 - (1) Jenkins 구성 (1) | 2024.03.07 |
[Devops] Jenkins에서 Plugin 및 Credential 설정 (0) | 2024.03.04 |
[Devops] Ubuntu에 Jenkins 설치 (1) | 2024.02.20 |