반응형

이번 포스팅에서는 GCP에서 지속적 통합/배포라고 불리는 CI/CD 파이프라인을 구축해보는 작업을 해보도록 하겠다.

 


CI/CD 란?

 

CI는 지속적 통합(Continuous Integration) CD는 지속적 배포(Continuous Deployment)을 나타낸다. 


CI, Continuous Integration (지속적 통합): 개발자들이 작업한 코드를 지속적으로 통합하여 통합 문제를 최소화하고, 코드 변경이 일어날 때마다 자동으로 빌드 및 테스트가 실행되며, 코드베이스에 통합시키도록 한다.


CD, Continuous Deployment (지속적 배포) : CI를 통과한 이후, 자동화된 프로세스를 통해 테스트를 통과한 코드를 실제 환경으로 자동으로 프로덕션 환경에 배포하는 파이프라인 구축을 목적으로 한다.

 

 

 

이전에는 수정 사항이 있을 때마다 Docker를 빌드하고, 푸시하고, GCP에 접속하여 쿠버네티스에 연결 후 이미지를 업데이트 하는 등 업데이트가 이루어질 때 마다 번거로운 작업을 해야 했다.

 

배포를 자동화하게 되면 Git에 push 하기만 하면 그 코드를 가지고 도커가 자동으로 빌드되고 배포되도록 할 수 있기에 생산성이 훨씬 늘어날 수 있다.

 

 


Cloud Build 설정

 

Cloud Build -> 설정에 들어가주자

 

 

Kubernetes Engine을 사용하고 있으므로 해당 권한을 사용 설정으로 변경해준다.

 

 

 

 

 


저장소 연결

 

 

Cloud Build -> 트리거 -> 저장소 연결에 들어가준다.

 

 

 

 

우리는 Github에 푸시된 소스코드를 빌드하고, 자동으로 배포하려고 만들려고 한다.

따라서 제공업체는 Github을 선택해준다.

 

 

 

 

 

 

Github에서 인증을 거치면 Google Cloud Build 설치를 안내하는 UI가 나올 것이다.

절차대로 Install해주면 된다.

 

 

 

이제 파이프라인을 구축할 Github의 Repository를 선택해준다. 이 뜻은 해당 Repository의 변경 감지가 일어나면, 자동으로 새로운 소스코드를 이용하여 배포하는 파이프라인을 만들겠다는 뜻이다. 

 

 

 

 

 

 

트리거 만들기

 

이제 이어서 Repository의 변경이 감지되었을 때, 어떤 작업을 할 지 트리거를 만들어 주도록 하겠다.

 

 

 

main 브랜치로 푸시되는 것을 감지했을 때 CI/CD 작업이 일어나도록 설정해주었다.

 

 

 

 

 

트리거에서 실행 내용은 cloudbuild.yaml 파일에서 정의할 것이다. 따라서 구성에서는 상기의 옵션을 선택해준다.

Cloud Build 구성 파일 위치는 Repository를 root 경로로 잡아서, 상대경로를 잘 맞추어 주어야 한다.

 

 

 


Cloud Build 구성 파일 작성

 

상기에서 설정한 경로인 프로젝트 Git 루트 위치에 cloudbuild.yaml을 생성해주었다.

 

 

 

▶ cloudbuild.yaml

steps: 
  # 1. Docker-compose -f docker-compose.k8s.prod.yaml build
  - name : docker/compose:1.29.0  # 없으면 다운로드
    args:
      # - docker-compose
      - -f
      # - docker/docker-compose.k8s.prod.yaml : 명령어가 실행되는 지점은 Github 루트 경로임. 따라서 docker-compose의 경로를 잘 맞춰주기
      - docker-compose.k8s.prod.yaml
      - build

  # 2. Docker-compose -f docker-compose.k8s.prod.yaml push
  - name : docker/compose:1.29.0  # 없으면 다운로드
    args:
      # - docker-compose
      - -f
      - docker-compose.k8s.prod.yaml
      - push

  # 3. kubectl set image deployment/my-project-nestjs my-backend-name-sha256-1=asia.gcr.io/cool-freehold-377205/my-backend-name:0.5
  - name : gcr.io/cloud-builders/kubectl  # 없으면 다운로드
    args:
      # - kubectl
      - set
      - image
      - deployment/my-project-nestjs
      - my-backend-name-sha256-1=asia.gcr.io/cool-freehold-377205/my-backend-name:0.5
      # 해당 환경변수 설정
      # gcloud container clusters get-credentials autopilot-cluster-1 --region asia-northeast3 --project cool-freehold-377205
    env:
      - CLOUDSDK_COMPUTE_ZONE=asia-northeast3 # 리전
      - CLOUDSDK_CONTAINER_CLUSTER=autopilot-cluster-1  # 쿠버네티스 클러스터

파이프라인에서 실행해야 할 프로젝트 빌드 및 실행 내용을 정의해준다.

각 단계는 Step으로 구성한다.

1. 도커 이미지 빌드, docker-compose build에 해당하는 작업을 진행한다.

2. 도커 이미지 푸시, docker-compose push에 해당하는 작업을 진행한다.

3. 쿠버네티스 이미지 업데이트, kubectl set image에 해당하는 작업을 진행한다.

  • 이 때 env에 내 GCP 프로젝트의 쿠버네티스 클러스에 해당하는 Name과 리전을 잘 설정해주어야 한다.

 

 

 


결과 확인

 

이제 Git에 Push를 하게 되면 자동으로 빌드 및 배포가 이루어지게 된다.

Git Push 이후, GCP - Cloud Build > 기록에서 빌드되는 과정을 볼 수 있다.

 

다음과 같이 Step 별로 cloudbuild.yaml에 정의한 내용들을 기반으로 빌드가 진행되고 있다.

 

 

 

 

 

 

시간이 지난 후 쿠버네티스 클러스터에 접속하여 Pod의 생명주기를 확인해보면,

새롭게 업데이트 된 Pod들을 확인할 수 있었다.

반응형

BELATED ARTICLES

more