프로젝트의 발단은 위 아키텍처를 보고 시작했습니다.
개발자가 도커 이미지를 변경하여 Github에 push 하면 Jenkins에서 도커 이미지를 build 하고, 빌드 번호를 이미지 태그에 붙여 ECR에 push 합니다. 그리고 Github의 deployment.yaml 파일에 이미지 태그의 정보를 업데이트합니다.
argoCD에서 EKS Cluster에 Pod를 배포합니다.
처음으로 제대로 된 CICD를 구축해 볼 생각에 즐거웠습니다.
하지만 과정은 그렇게 즐겁지만은 않았죠... 젠킨스 파일 삽질을 꽤 했습니다...
시작해보겠습니다.
작업 순서
1. EKS, ECR 생성
2. Github에 코드 올리기
3. Jenkins 설치 및 설정
4. Jenkinsfile
5. argoCD 설치
6. 확인
1. EKS, ECR 생성
이미지를 미리 하나 올려놨습니다.
2. Github 에 코드 올리기
eks 폴더 - deployment.yaml, service.yaml
jenkins 폴더 - Jenkinsfile
3. Jenkins 설치 및 설정
Jenkins 설치 명령어
$ docker run -itd --name jenkins -p 8080:8080 -p 50000:50000 \
-v /docker/jenkins:/var/jenkins_home -v /var/run/docker.sock:/var/run/docker.sock \
-e TZ=Asia/Seoul -u root jenkins/jenkins:latest
Jenkins Container 내부에 Docker 설치 (docker in docker)
# Jenkins container 접속
$ docker exec -it jenkins bash
# docker 설치
$ curl -fsSL get.docker.com -o get-docker.sh
$ sh get-docker.sh
# 확인
$ docker ps
플러그인 설치
docker-build-step / Docker plugin / Docker Pipeline / AWS ECR
위의 목록들을 설치해줍니다.
Credential 생성
github을 private으로 생성하였기 때문에 접근하기 위한 자격증명이 필요합니다.
설정 방법은 아래 포스팅에 남겼습니다.
2022.01.03 - [Container/CICD] - Jenkins Pipeline Github Private Token 사용하여 연동
Jenkins에서 AWS ECR에 접근하기 위한 자격증명이 필요합니다.
위에 처럼 ECR Full access 정책이 있는 IAM Key를 넣어줍니다. (코드에 넣어줄 예정입니다)
https://plugins.jenkins.io/amazon-ecr/
Pipeline 생성
Definition: SCM
SCM: Git
Repository URL: 본인 Github url
Credentials: Github account을 위해 작성한 자격증명
Branch Specifier: 브랜치명
Script Path: Jenkinsfile 위치
4. Jenkinsfile
deploy 부분입니다.
전 stage에서 Dockerfile을 build 하고, 도커이미지:빌드번호 를 AWS ECR에 push 합니다.
그리고 github에 있는 deployment.yaml 파일에 있는 이미지 태그를 업데이트하기 위해 sed 명령어를 사용합니다.
저는 변수에 이전 빌드번호를 넣고 최신 번호로 업데이트하는 것으로 코드를 짰습니다.
#!/usr/bin/env 언어
env는 환경 변수에서 지정한 언어의 위치를 찾아 실행됩니다.
다양한 환경에서 실행되는 스크립트 하면 env를 사용하는 것이 좋습니다.
5. argoCD 설치
EKS Cluster에 argoCD 설치하는 방법입니다.
argoCD 구성, 애플리케이션 배포에서 EKS 연결하는 것까지 하면 됩니다.
https://www.eksworkshop.com/intermediate/290_argocd/install/
Manage > Repositories에서 github 설정을 합니다.
그 후, New APP 클릭하여 설정하겠습니다.
manifest 파일이 업데이트되면 자동으로 클러스터에 배포되도록 sync를 automatic으로 설정하겠습니다.
Repository URL: Manage에서 설정한 github url을 선택합니다.
Path: github에서 manifest 파일이 위치한 경로를 적어주세요.
서비스 배포를 위한 App이 생성되었습니다.
github에 있는 manifest 파일에 의해 클러스터에 pod가 자동으로 배포되었습니다.
6. 확인
Build Now 클릭 (웹훅 설정은 패스)
빌드 성공.
이전 버전인 5를 최신 버전인 6으로 업데이트하여 deployment.yaml 파일을 업데이트합니다.
자동으로 새로운 pod가 배포되었습니다.
해당 nginx pod image를 확인해 보면 버전 6가 제대로 배포된 것이 확인됩니다!
감사합니다 :)
참고
https://daddyprogrammer.org/post/14102/argocd-kubernetes-cluster-deploy/
'DevOps > CICD' 카테고리의 다른 글
GitOps, ArgoCD Overview (0) | 2023.10.11 |
---|---|
Argocd를 사용하여 helm chart 배포 및 주의사항 (1) | 2022.04.25 |
argoCD App of Apps 패턴을 사용한 서비스 배포 (7) | 2022.03.11 |
Jenkins Pipeline Github Private Token 사용하여 연동 (0) | 2022.01.03 |
Jenkins, Codedeploy 사용하여 CICD 환경 구축 (0) | 2021.10.10 |