Astro Hub

DevOps / 13.CI_GithubRepo

프로젝트: astro-sub1

원본 경로: operateguide/DevOps/13.CI_GithubRepo.md


[CI] Github Repository

전체 Repository 구조 (표준)

  ```
      .github/workflows/XXX-ci.yml  # Github Action Workflow
      Dockerfile                    # 도커파일
      myapp/
      ├── base/                     # 공통 리소스
      │   ├── deployment.yaml       # 기본 Deployment
      │   ├── service.yaml          # 기본 Service
      │   └── kustomization.yaml    # Base 설정
      └── overlays/                 # 환경별 커스터마이징
          ├── dev/                  # 개발 환경
          │   └── kustomization.yaml
          └── prd/                  # 운영 환경
              ├── kustomization.yaml
              └── patch-resㅇ
  
  ```

1. Dockerfile

1) Dockerfile 이란?

  • 도커 이미지를 생성하기 위한 설파일으로, Docker Build 시 도커파일에 나열된 명령문 순서대로 이미지 빌드를 수행한다.

2) Dockerfile Sample

FROM nginx:alpine

ARG NGINX_PORT=8080

ENV TZ=Asia/Seoul \
APP_NAME="myapp"

WORKDIR /usr/share/nginx/html

COPY public/ ./ 

RUN set -eux; \
    mkdir -p /etc/nginx/conf.d /var/cache/nginx /var/run /var/log/nginx;

CMD echo nginx --version

2. GitOps - Manifest 관리

1) Kustomize란?

* Kustomize는 Kubernetes manifest 파일을 템플릿 없이 커스터마이징할 수 있는 도구입니다. 
      
  | 특징 | Helm | Kustomize |
  |------|------|-----------|
  | 접근 방식 | 템플릿 기반 | 오버레이 기반 |
  | 문법 | Go 템플릿 | 순수 YAML |
  | 학습 곡선 | 중간 | 낮음 |
  | 패키지 관리 | 지원 | 미지원 |
  | kubectl 명령어 | 별개 설치 | 기본 내장 |

* Kustomize는 Helm에 비해 순수 yaml을 사용하여 가독성이 좋고, 간단한 환경별 설정 관리에 적합하다는 장점이 있습니다.

* ktds Azure Tenant에서는 Kustomize를 사용한 manifest 관리를 권장하고 있습니다.

2) 핵심 개념

  ```
      myapp/
      ├── base/                      # 공통 리소스
      │   ├── deployment.yaml        # 기본 Deployment
      │   ├── service.yaml          # 기본 Service
      │   └── kustomization.yaml    # Base 설정
      └── overlays/                 # 환경별 커스터마이징
          ├── dev/                  # 개발 환경
          │   └── kustomization.yaml
          └── prd/                  # 운영 환경
              ├── kustomization.yaml
              └── patch-resources.yaml
  ```

  *  `base`
: 모든 환경에서 공통으로 사용하는 기본 리소스 정의입니다. 애플리케이션의 기본 형태를 정의하며, 실행 가능한 최소 단위로 구성합니다.
  * `Overlay` 
  : 특정 환경 (dev, prd)에 필요한 변경사항만 정의합니다. Base를 참조하여 환경별 차이점만 적용합니다.
  * `kustomization.yaml` 
  : kustomize의 설정 파일로, 어떤 리소스를 포함하고 어떤 방식으로 커스터마이징할지 정의합니다.
  * `Patch` 
  : 기존 리소스의 특정 필드만 수정하여 전체 리소스를 다시 정의하지 않고 필요한 부분만 변경할 수 있는 기능입니다. 그 예시로, patch-resource.yaml 과 같이 별도 yaml 파일을 kustomization의 patch 필드에 정의하여 base의 특정 리소스의 변경사항을 환경별로 적용할 수 있습니다. 

3) GitAction에서의 Kustomize 활용

  ```
  - name: Update kustomization.yaml with newTag
    run: |
      sed -i "s/newTag: .*/newTag: ${{ env.IMAGE_TAG }}/" $KUSTOMIZATION_FILE
  ```
  • 아티팩트 업로드 후 새로운 태그를 업데이트 할 때, Kustomize.yaml을 업데이트 하여 ArgoCD에 반영할 수 있습니다.

프로젝트 홈으로 돌아가기