본문 바로가기
Kubernetes/CI-CD

CI/CD 적용 가이드 #1 (개요)

by 여행을 떠나자! 2021. 9. 26.

2021.04.09

1. CI/CD 개념
a. CI(Continuous Integration) / CD(Continuous Deployment)
- 개념

   ✓ CI/CD
       CI/CD는 애플리케이션 개발 단계를 자동화하여 애플리케이션을 보다 짧은 주기로 고객에게 제공하는 방법
   ✓ CI
       애플리케이션에 대한 코드 변경 사항이 정기적으로 빌드 및 테스트되어 공유 레포지토리로 통합
       여러 명의 개발자가 동시에 애플리케이션 개발과 관련된 코드 작성을 할 경우 서로 충돌 문제를 해결
   ✓ CD
      개발자의 변경 사항을 레포지토리에서 개발/프로덕션 환경으로 자동으로 릴리스 
      지속적 배포가 제대로 이루어지려면 테스트 자동화가 제대로 설계되어 있으야 함

- 참고: https://www.redhat.com/ko/topics/devops/what-is-ci-cd

b. Gitops ?
- 개념
   ✓ 클라우드 네이티브 애플리케이션을 대상으로 한 지속적 배포(Continuous Deployment)에 초점
   ✓ 애플리케이션의 배포와 운영에 관련된 모든 요소를 코드화하여 깃(Git)에서 관리(Ops)하는 것이 핵심
- 핵심 아이디어
   ✓ 배포에 관련된 모든것을 선언형 기술서(Declarative Descriptions) 형태로 작성하여 Config Repository에서 관리
   ✓ Config Repository의 선언형 기술서와 운영 환경 간 상태 차이가 없도록 유지시키는 자동화 시스템을 구성
- 참고: https://post.naver.com/viewer/postView.nhn?volumeNo=30601103&memberNo=36733075&vType=VERTICAL


2. CI / CD Tools
a. CI Tools
- GitLab
   ✓ GitLab is a web-based DevOps lifecycle tool that provides a Git-repository manager providing wiki, issue-tracking and CI/CD pipeline features.
   ✓ Software Configuration Management(SCM) is a process to systematically manage, organize, and control the changes in the documents, codes, and other entities during the Software Development Life Cycle.
- Jenkins
   ✓ open source automation server which can be used to automate all sorts of tasks related to building, testing, and delivering or deploying software.
- Nexus repository
   ✓ Nexus Repository OSS is an open source repository that supports many artifact formats, including Docker, Java, and npm.
- Harbor
   ✓ Harbor is an open source container image registry that secures images with role-based access control, scans images for vulnerabilities, and signs images as trusted.
- SonarQube
   ✓ continuous inspection of code quality to perform automatic reviews with static analysis of code to detect bugs, code smells, and security vulnerabilities on 20+ programming languages

 

b. CD Tool
- Argo CD
   ✓ Argo CD is a declarative, GitOps continuous delivery tool for Kubernetes.
- Kustomize 
   ✓ Kustomize introduces a template-free way to customize application configuration that simplifies the use of off-the-shelf applications. 


3. CI/CD Architecture
a. 전제조건
- 개발 / 운영 환경이 Kubernetes 환경 일 것
- CI tools은 1) 융기원 SW개발자Hub, 2) IT부문 Chelsea, 3) 융기원 AI Core Platfrom 중 하나를 사용 할 것

b. 아키텍처 구성도

c. CI/CD 흐름
- CI
   ✓ Developer (Source push)  
       ▷ GitLab (Merge Request ‣ Merge) 
       ▷ Jenkins (Pipeline: test ‣ code analysis ‣ build image ‣ push image to nexus ‣ change YAML  ‣ push YAML to GitLab)
- CD
   ✓ CI에 의한 Docker Image 변경시
       Argo CD (Auto Sync: apply YAML to Kubernetes)
   ✓ K8s configuration file 변경시
       K8s Configuration Manager (YAML file push) ► Argo CD (Auto Sync: apply YAML to Kubernetes)

d. Argo CD 관련 고려 사항 
- Sync Policy
   ✓ Auto Sync : 주기별 동기화 체크 후 불 일치시 반영
   ✓ Manual Sync : 주기별 동기화 체크

- Argo CD 배치
   ✓ 개발/운영이 분리된 경우
       ▷ 개발 환경에 만 Argo CD 구성 
           개발 Argo CD에서 원격으로 운영 환경에 반영 (Auto Sync or Manual Sync) 
       ▷ 개발 / 운영 환경 별로 Argo CD 구성 
   ✓ 개발/운영이 통합된 경우
       ▷ 하나의 Argo CD 구성, 개발/운영 환경운 K8s의 Namespace로 분리


4.  시스템 별 CI/CD 적용 가이드
a. 시스템 약어 정의
- GitLab Source와 Configuration project, Docker Image, Kubernetes Service/Pod 이름 설정시 Prefix로 사용
   ex) 시스템 약어: agp, Source repo/Docker Image/Kubernetes Pod: agp-?????, Configuration Repo: agp-gitops

b. GitLab repository 정책
- Source repository
   ✓ 다수의 git Source 프로젝트 생성
   ✓ git 프로젝트 단위로 Docker Image 생성 (ex. agp-app1/Dockerfile)
   ✓ git 프로젝트 단위로 Jenkins pipeline 정의 파일 포함 (ex. agp-app1/Jenkinsfile)
   ✓ git 프로젝트 명은 Docker Image 명, K8s Service / Pod 명으로 사용
   ✓ 예제 (git 프로젝트)

    agp-app1
    ├── Dockerfile
    ├── Jenkinsfile
    ├── README.md
    ├── app.py
    └── requirements.txt

- Configuration repository
   ✓ 단일 git 프로젝트로 생성 (ex. agp-gitops)
   ✓ Docker Image 이름 별로 디렉토리 생성 (ex. agp-gitops/agp-app1, agp-gitops/agp-app2)
   ✓ 설정 파일은 Kustomize 기반으로 구성하고 시스템별 특성을 고려해서 운영 (ex. 개발/운영을 분리)
   ✓ 예제  (git 프로젝트)

    agp-gitops
    ├── agp-app1
    │   ├── base
    │   │   ├── deployment.yaml
    │   │   ├── kustomization.yaml
    │   │   └── service.yaml
    │   └── overlays
    │       ├── development
    │       │   └── kustomization.yaml
    │       └── production
    │           ├── deployment-patch.yaml
    │           └── kustomization.yaml
    ├── agp-app2
    └── agp-app3

 

'Kubernetes > CI-CD' 카테고리의 다른 글

CI/CD 적용 가이드 #3 (CD-Gitops 편)  (0) 2021.09.26
CI/CD 적용 가이드 #2 (CI 편)  (0) 2021.09.26
Jenkins  (0) 2021.09.18
Harbor  (0) 2021.09.18
Giblab  (0) 2021.09.17

댓글