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에 반영할 수 있습니다.