티스토리 뷰

GitOps를 구축하는데 가장 중요한 단계이다.

 

CI/CD 부분에서 키 설정등의 내용이 많아서 100% 전달할 수 있을지 잘 모르겠다.

 

이전까지 진행 상황

 

이 전 글에서 봤던 파이프라인이지만 이전 글에서는 ArgoCD를 EKS 내부에 띄우는데까지만 진행했었다.(위 그림에서 할당된 번호도 없음)

 

그리고 CI는 이전 글들에서 진행했었다.

 

아래 글에 1 ~ 3번 과정이 정리되어있다.

2023.11.06 - [개발/인프라] - github action으로 CI/CD 구축하기 - 1. CI

2023.11.12 - [개발/인프라] - github action으로 CI/CD 구축하기 - 2. JIB

 

마지막으로 남은 CD 자동화 부분이다.

 

자동화를 위해서는 ArgoCD가 모니터링할 GitHub Repository를 지정해주고, 프로젝트를 배포할 수 있도록 설정해야한다.

 

하나씩 진행해보자.

 

ArgoCD Github Repository 생성

https://github.com/imsosleepy/argocd를 생성해줬다.

 

당장 저장소에서 무언가를 진행하진 않지만 deployment 설정 파일과 프로젝트/어플리케이션 파일의 생성이 필요하다.

프로젝트와 어플리케이션 매니페스트 배포

ArgoCD에 만들고자 하는 프로젝트와 어플리케이션 옵션을 지정해줘야 한다.

 

project.yaml

apiVersion: argoproj.io/v1alpha1
kind: AppProject
metadata:
  name: test
  namespace: argocd
spec:
  description: "Test project for applications"
  sourceRepos:
    - '*'
  destinations:
    - namespace: '*'
      server: https://kubernetes.default.svc
  clusterResourceWhitelist:
    - group: '*'
      kind: '*'
  namespaceResourceWhitelist:
    - group: '*'
      kind: '*'

 

application.yaml

apiVersion: argoproj.io/v1alpha1
kind: Application
metadata:
  name: test
  namespace: argocd
  finalizers:
    - resources-finalizer.argocd.argoproj.io
spec:
  project: test
  source:
    repoURL: https://github.com/imsosleepy/argocd.git
    targetRevision: main
    path: deploy
    helm:
      valueFiles:
        - test/values.yaml
  destination:
    server: https://kubernetes.default.svc
    namespace: argocd
  syncPolicy:
    automated:
      selfHeal: false
      prune: true

테스트 프로젝트라 별다른 제한을 두지는 않았고, 헬름 파일의 경로는 test/values로 지정해줬다.

 

배포는 kubectl로 진행했다.

프로젝트 배포 : kubectl apply -f project.yaml
어플리케이션 배포 : kubectl apply -f application.yaml

코드 : https://github.com/imsosleepy/argocd/tree/main/manifest

 

프로젝트와 어플리케이션은 yaml 파일로 생성하지 않고, argoCD 대시보드 내에서도 만들 수 있다.

 

 

 

depolyment 설정 파일 생성

경로를 잘 기억해둬야한다. 상태 검사(helathCheck) API도 필수다.

 

ArgoCD는 이 파일의 deploy.test.imageTag 라인을 모니터링하도록 설정할 것이다.

project: "test"
name: "test"
common:
  image:
    repository: 301591718339.dkr.ecr.ap-northeast-2.amazonaws.com/cicd-demo
  port: 8080
  ingressPath: ["/"]
  healthCheckPath: "/actuator/health"
deploy:
  test:
    imageTag: "test-6bc41956cdf7be065852dcec73812d40483f98a7"
    domain: [""]
    replicaCount: 1
    resources:
      requests:
        memory: "1Gi"
      limits:
        memory: "1Gi"

 

Personal Access Token을 발급

우선 ArgoCD Repository의 변경사항을 모니터링할 수 있게 Personal Access Token을 발급해줘야한다.

 

GitHub 웹에서 우측 상단 본인 썸네일 클릭 > Settings > Developer Settings에 가면 있다.

그냥 계속 쓰고 싶어서 만료일 없이 발급

 

그리고 ArgoCD base 헬름 차트의 password에 이 값을 넣어준다.

repositories = {
  "private-repo" = {
    url      = "url"
    project  = "default"
    type     = "git"
    # ArgoCD Personal Accesss Token
    password = "" // 여기
  }
  ...
 }

 

Github Action Workflow 설정

이전에 ci까지만 작성했던 github action workflow에 argocd를 추가해줬다.

https://github.com/imsosleepy/ci-test/blob/master/.github/workflows/deploy.yml

argocd:
    needs: [build]
    runs-on: ubuntu-latest
    steps:
      - name: 아르고 CD 레포지토리 체크아웃
        uses: actions/checkout@v4
        with:
          repository: imsosleepy/argocd
          token: ${{ secrets.argocd_pat }}
          path: .argocd-repo

      - name: 아르고 CD 레포지토리 이미지 태그 변경 사항 업데이트
        working-directory: .argocd-repo
        run: |
          yq -i '.deploy.test.imageTag = "testbed-${{ github.sha }}"' deploy/test/values.yaml

          git config --local user.name "daniel kim"
          git config --local user.email "kimdongha15@gmail.com"

          git add deploy/test/values.yaml
          MSG=$(echo "${{github.event.head_commit.message}}" | tr -d '"')
          git commit --allow-empty -m "$MSG" -m 'ref: https://github.com/${{ github.repository }}/commit/${{ github.sha }}'
          git push --force

 

위 스텝을 요약해보면

1. ci-test 레포지토리에서 argocd 레포지토리로 체크아웃

2. yq 명령어를 통해 values.yaml 파일의 이미지 태그 라인을 수정

3. yaml 파일을 argocd 레포에 git 명령어를 통해 push

 

정리해놓고 보니까 간단해보이는데, 중간중간 권한과 빠진 부분 설정들이 괴롭혔었다.

 

무엇보다 이 프로젝트는 AWS와 연동하는게 없는 단순 api를 찍는 프로젝트라 IRSA와 SA 설정이 필요가 없었다.

 

만약 연동이 필요하다면, IRSA, SG를 관리하는 추가적인 Terraform 소스가 필요하다.

 

마치며

사실 여기까지가 백엔드 개발자가 알아두면 좋은 AWS 설정과 GitHub의 자동배포 과정이라고 생각한다.

 

권한과 보안, AWS 인프라 상세 설정을 위한 여러 작업들이 남아있긴 하지만, 포스팅하기엔 공부가 필요한 내용이다.

 

다른 관찰가능성 도구들은 간단하게 정리하듯이 작성하고 마무리할 듯 하다.

 

그래도 Grafana Loki를 이용한 로그 저장 방법과 쿼리 방법은 여유가 있으면 진행해보려고한다.

공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/07   »
1 2 3 4 5 6
7 8 9 10 11 12 13
14 15 16 17 18 19 20
21 22 23 24 25 26 27
28 29 30 31
글 보관함