Skip to content

백엔드 CI CD 동작 프로세스

김경미 edited this page Oct 16, 2024 · 16 revisions

이 글에서는 우리 서비스의 CI/CD가 어떻게 동작하는지에 대해 살펴봅시다.

CI/CD 구조

image

CI 전체 프로세스

backend_ci.yml

Backend CI 스크립트

해당 스크립트는 Pull request base 브랜치를 dev/be, main 브랜치로 할 때 실행된다.

1. 체크아웃

  • 레포지토리를 CI 환경으로 가져온다.
  • PR의 대상이 되는 브랜치를 체크아웃하여 작업을 진행할 수 있도록 설정한다.

2. MySQL 실행

  • MySQL을 설정된 포트 및 설정값으로 실행한다.
  • MySQL 버전, 데이터베이스 이름, 포트, 루트 비밀번호 등은 사전에 보안상의 이유로 secrets에 저장된 값을 활용한다.

3. DB 설정 파일 가져오기

  • 보안을 위해 DB 설정 정보는 secrets에 숨겨두었으며, 이를 활용해 application-db.yml 파일을 생성한다.
  • 이 파일은 애플리케이션이 데이터베이스에 접근할 때 필요한 설정을 담고 있다.

4. Gradle 캐싱

  • 동일한 CI 동작이 반복될 때 이전에 다운로드한 Gradle 종속성 및 빌드 결과물을 캐싱하여 빌드 시간을 단축한다.
  • 캐싱된 결과물이 있으면 이를 활용하여 빠르게 빌드가 진행된다.

5. JDK 17 설치

  • 프로젝트가 Java 17을 사용하도록 JDK 17을 설치한다.
  • 이를 통해 애플리케이션이 Java 17 환경에서 정상적으로 빌드 및 실행될 수 있도록 보장한다.

6. 테스트 실행

  • Gradle을 사용해 프로젝트의 테스트 코드를 실행한다.
  • 이 과정에서 MySQL 데이터베이스에 대한 통합 테스트가 포함될 수 있으며, 프로젝트 내에서 정의된 모든 테스트가 수행된다.

CD 전체 프로세스

backend_cd.yml

해당 스크립트는 dev/be, main 브랜치가 업데이트 될 때 실행된다.

스크립트는 총 3개의 jab을 가지고 있다.

  1. build : 배포를 위해 현재 데이터를 빌드해 jar 파일로 저장한다.
  2. deploy_develop: 개발 서버에 배포한다.
  3. deploy_production: 브랜치가 main이면 운영 서버에 배포한다.

jab 1 : build

1. 체크아웃

  • 레포지토리를 CI 환경으로 가져온다.
  • PR의 대상이 되는 브랜치를 체크아웃하여 작업을 진행할 수 있도록 설정한다.

2. JDK 17 설치

  • 프로젝트가 Java 17을 사용하도록 JDK 17을 설치한다.
  • 이를 통해 애플리케이션이 Java 17 환경에서 정상적으로 빌드 및 실행될 수 있도록 보장한다.

3. Gradle 캐싱

  • 동일한 CI 동작이 반복될 때 이전에 다운로드한 Gradle 종속성 및 빌드 결과물을 캐싱하여 빌드 시간을 단축한다.
  • 캐싱된 결과물이 있으면 이를 활용하여 빠르게 빌드가 진행된다.

4. bootJar로 jar 파일 생성

  • Gradle을 사용해 bootJar 작업을 수행하여 애플리케이션의 실행 가능한 JAR 파일을 생성한다.

5. Artifact 업로드

  • 빌드 결과물(JAR 파일)을 저장해 이후 배포 단계에서 사용하기 위한 Artifact로 업로드한다.

jab 2 : deploy_develop

  • build 작업이 완료되어야 실행된다.
  • 브랜치가 dev/be인 경우에만 실행되며, 이 작업은 개발 서버로 배포하는 용도이다.
  • self-hosted runner 중 springdevelop 라벨이 있는 runner를 사용한다.

1. Artifact 다운로드

  • 이전 build 작업에서 저장된 Artifact를 동일한 CI 환경에서 다운로드하여 배포에 사용한다.

2. 배포 스크립트 실행

  • 서버 내부에 미리 정의된 배포 스크립트를 실행하여 애플리케이션을 개발 환경에 배포한다.

jab 2 : deploy_production

  • build 작업이 완료되어야 실행된다.
  • 브랜치가 main인 경우에만 실행되며, 이는 프로덕션 서버로의 배포를 담당한다.
  • self-hosted runner 중 prod_aprod_b 라벨이 있는 runner를 사용한다.

1. Artifact 다운로드

  • build 작업에서 저장된 Artifact를 다운로드하여 배포에 사용한다.

2. 배포 스크립트 실행

  • 서버에 정의된 배포 스크립트를 실행하여 애플리케이션을 프로덕션 환경에 배포한다.

⚡️ 코드zap

프로젝트

규칙 및 정책

공통

백엔드

프론트엔드

매뉴얼

백엔드

기술 문서

백엔드

프론트엔드

회의록


Clone this wiki locally