product-composite-service CI/Cd 파이프라인 설정

1. 파이프라인에서 사용할 ArgoCD Admin 암호 Secrets Manager에 저장

cd ~/environment/eks-workshop/cloud9

# 파이프라인에서 참조할 ArgoCD 암호를 AWS Secrets Manager에 저장합니다.
# ArgoCD Admin 암호는 `테라폼을 통한 아마존 EKS 프로비저닝` 단계에서 설정한 암호를 사용합니다.
./set-argocd-admin-password-secrets-manager.sh "Abraca00#1" product-composite-service-ci-argocd-admin-password

2. product-composite-service Helm Chart 의존성 빌드

product-composite-service 마이크로서비스 Helm Chart의 의존성을 빌드하여 이후 ArgoCD 애플리케이션을 생성할 수 있도록 준비합니다. 이 작업은 초기에 한번만 수행하면 되고 이후에는 빌드 파이프라인이 Helm 리포지터리를 변경하면 ArgoCD에 의해 자동으로 Sync되게 됩니다.

# 작업을 도와주는 어플리케이션 Makefile 경로로 이동합니다.
cd ~/environment/eks-workshop/microservices-cicd-pipeline/product-composite-service

# Helm 의존성을 업데이트합니다.
make helm-dep-up-all ENV=prod

# Helm 의존성을 업데이트한 템플릿 결과를 확인합니다.
make helm-template-env ENV=prod

3. product-composite-serviceHelm 리포지터리 설정

# 어플리케이션 Helm 경로로 이동합니다.
cd ~/environment/eks-workshop/microservices-cicd-pipeline/product-composite-service/kubernetes/helm

# CodeCommit GitOps 리포지터리와 연결합니다.
# 우리는 Git 리포지터리를 초기화하지 않았으므로, 아래와 같이 하면 Outer git 저장소 내에 Inner git 저장소를 Tracking하게 됩니다. 이와 유사하지만 Git 저장소 내에서 Nested Git 저장소를 좀 더 체계적으로 운영하는 방법은 Git Submodule이 있습니다.
git init
git branch -M main

export HELM_CODECOMMIT_URL=$(aws codecommit get-repository --repository-name product-composite-service-configuration --region ap-northeast-2 | grep -o '"cloneUrlHttp": "[^"]*' | grep -o '[^"]*$')
echo $HELM_CODECOMMIT_URL

git remote add ccorigin $HELM_CODECOMMIT_URL

# Git 스테이징 영역에 파일을 추가합니다.
git add .

# Commit 및 배포 리포지터리에 Push합니다.
git commit -am "First commit."
git push --set-upstream ccorigin main

3. ArgoCD 애플리케이션 설정

  1. ArgoCD 접속에 필요한 정보릃 확인하고 접속합니다.

테라폼을 통해서 이미 배포한 EKS 클러스터에는 ArgCD가 설치되어 있으며, 또한 AWS ELB (Elastic Load Balancer)를 통하여 외부에서 접속할 수 있습니다.

아래와 같이 ArgoCD 접속에 필요한 URL을 확인합니다.

# ArgoCD 접속 주소를 확인합니다.
kcp
export ARGOCD_SERVER=`kubectl get ingress/argocd-server -n argocd -o json | jq --raw-output '.status.loadBalancer.ingress[0].hostname'`
echo https://$ARGOCD_SERVER

확인한 접속 주소와 앞서 미리 설정한 패스워드를 사용하여 ArgoCD Web UI에 접속해 봅니다. ArgoCD UI

  1. ArgoCD가 GitOps 배포 (Helm) 리포지터리에 접속할 수 있도록 IAM 사용자 및 Git Credentials을 생성하고 메모해 둡니다 (CLI 사용).

# IAM User 생성
aws iam create-user --user-name argocd 

# AWSCodeCommitPowerUser 관리형 권한 정책 연결 (arn:aws:iam::aws:policy/AWSCodeCommitPowerUser)
aws iam attach-user-policy --user-name argocd --policy-arn arn:aws:iam::aws:policy/AWSCodeCommitPowerUser

# CodeCommit 접근을 위한 Specific Credential 생성
# (중요) 결과로서 반환되는 "ServiceUserName"과 "ServicePassword"를 기록해 둡니다.
aws iam create-service-specific-credential --user-name argocd --service-name codecommit.amazonaws.com
  1. ArgoCD 애플리케이션을 생성합니다.

  • 로그인 이후에 좌측의 Settings 메뉴를 클릭한 뒤 Repositories 항목을 클릭합니다. ArgoCD Repository Settings

  • Connect Repo 버튼을 클릭하고 MethodVIA HTTPS, Project는 default를 입력합니다.

  • Repository URL에는 앞서 확인한 배포 CodeCommit Repository의 HTTPS 주소를 (혹은 아래 명령으로 다시 확인 가능합니다), UsernamePassword에는 메모해 둔 정보를 입력합니다.

    export HELM_CODECOMMIT_URL=$(aws codecommit get-repository --repository-name product-composite-service-configuration --region ap-northeast-2 | grep -o '"cloneUrlHttp": "[^"]*'|grep -o '[^"]*$')
    echo $HELM_CODECOMMIT_URL

ArgoCD Repository Connect ArgoCD Repository Connect

  • Application 텝에서 NewApp버튼을 클릭합니다. Application Name 에는 product-composite-service를, Projectdefault를 입력합니다. Sync Policy에는 "Manual"을, Repository URL에는 앞서 설정한 배포 리포지터리를, PATH에는 environment/prod-env을 각각 입력합니다. Destination 섹션의 Cluster URL에는 https://kubernetes.default.svc, Namespace에는 hands-on를 입력하고 상단의 Create를 클릭합니다. ArgoCD Riches App

(참고) Application 생성 시 화면 하단에 Helm Setting 값들이 정상적으로 표시되는지 확인합니다.

  1. 이렇게 ArgoCD에서 어플리케이션을 생성하기만 하고 Sync 하지 않은 채로 두어도 됩니다. ArgoCD 파이프라인이 이후에 Sync를 수행하게 됩니다.

4. product-composite-service 빌드 및 켄테이너 이미지 전달

  1. 이제 어플리케이션의 빌드 및 전달 파이프라인이 시작될 수 있도록 애플리케이션 소스를 소스 리포지터리에 연결하고 푸시합니다.

# 어플리케이션 소스 경로로 이동합니다.
cd ~/environment/eks-workshop/microservices-cicd-pipeline/product-composite-service/app-src

# Git에 연결합니다.
# 우리는 Git 리포지터리를 초기화하지 않았으므로, 아래와 같이 하면 Outer git 저장소 내에 Inner git 저장소를 Tracking하게 됩니다. 이와 유사하지만 Git 저장소 내에서 Nested Git 저장소를 좀 더 체계적으로 운영하는 방법은 Git Submodule이 있습니다.
git init
git branch -M main

# AWS CLI를 통해서도 HTTPS URL을 바로 확인할 수 있습니다.
export APP_CODECOMMIT_URL=$(aws codecommit get-repository --repository-name product-composite-service-application --region ap-northeast-2 | grep -o '"cloneUrlHttp": "[^"]*' | grep -o '[^"]*$')
echo $APP_CODECOMMIT_URL

# CodeCommit 소스 리포지터리와 연결
git remote add ccorigin $APP_CODECOMMIT_URL

# 3. Git 스테이징 영역에 파일을 추가합니다.
git add .

# 4. Commit 및 배포 리포지터리에 Push합니다.
git commit -am "First commit."
git push --set-upstream ccorigin main
  1. 빌드 파이프라인이 성공적으로 수행되는지 확인합니다.

진행자의 안내를 받아 파이프라인의 각 단계를 둘러보면서 어떤 작업이 수행되는지 확인합니다.

Last updated