클라우드

EKS + ArgoCD + CodePipeline 으로 CI/CD 구성 하기

devchang 2024. 5. 2. 21:01

Demo App 생성

EKS cluster 생성

CodeCommit 리포지토리 생성

ArgoCD생성

CodePipeline 생성

 

Demo App 생성

 

app.py

from flask import Flask

app = Flask(__name__)

@app.route("/about")
def hello_world():
    return "V1 page"

 

Dockerfile

FROM python:3.8-alpine

COPY . /app

RUN pip3 install flask 

WORKDIR /app

CMD ["python3", "-m", "flask", "run", "--host=0.0.0.0"]

 

docker image를 build해서 application repo에 이미지를 업로드한다.

 

 

EKS cluster 생성

https://github.com/changhyun06/eks-argocd-codepipeline

 

GitHub - changhyun06/eks-argocd-codepipeline

Contribute to changhyun06/eks-argocd-codepipeline development by creating an account on GitHub.

github.com

앱 소스코드와 도커파일은 위를 참고하면 된다

나머지 eks resource 를 구성하는 매니페스트파일도 위 깃헙을 참고하면 된다

 

 

CodeCommit 리포지토리 생성

 

소스코드, Dockerfile, buildspec.yaml을 업로드 할 리포지토리

ArgoCD에 사용할 매니페스트파일을 저장할 리포지토리 

이렇게 두개를 만들어준다

 

 

ArgoCD 생성

 

공식 홈페이지에 있는 설치 명령어로 생성해준다

https://argo-cd.readthedocs.io/en/stable/getting_started/

 

Getting Started - Argo CD - Declarative GitOps CD for Kubernetes

Getting Started Tip This guide assumes you have a grounding in the tools that Argo CD is based on. Please read understanding the basics to learn about these tools. Requirements Installed kubectl command-line tool. Have a kubeconfig file (default location i

argo-cd.readthedocs.io

kubectl create namespace argocd
kubectl apply -n argocd -f https://raw.githubusercontent.com/argoproj/argo-cd/stable/manifests/install.yaml

 

그 후

kubectl patch svc argocd-server -n argocd -p '{"spec": {"type": "LoadBalancer"}}'

 

로드밸런서 타입으로 바꾸면 브라우저로 접속을 할 수 있다

 

kubectl -n argocd get secret argocd-initial-admin-secret -o jsonpath="{.data.password}" | base64 -d; echo

 

초기 비밀번호를 확인하고

로그인을 해준다

 

그리고 리포지토리 등록을 해준다

 

등록한 리포지토리로 어플리케이션도 등록 해준다

 

 

CodePipeline 생성

 

CodeCommit은 위에서 생성 했으므로 생략

 

CodeBuild를 생성 해준다

CodeBuild를 만들 때

buildspec.yaml에서 사용할 환경변수를 만들어준다

 

구성을 다 해준 후 

 

application code를 업데이트 해주면

몇분뒤에 새로운 application으로 교체되어 실행된다.