CI/CD

EunBeen Noh·2024년 6월 18일
0

SpringAdvanced

목록 보기
5/6

CI/CD

CI/CD란?

애플리케이션 개발 단계부터 배포 때까지의 모든 단계를 자동화를 통해 더 효율적이고 빠르게 빈번히 배포할 수 있는 것

CI(Continuous Integration)

지속적인 통합
애플리케이션의 버그 수정이나 코드 변경이 주기적으로 빌드 및 테스트되면서 공유되는 레포지토리에 merge되는 것

CD

지속적인 서비스 제공(Continuous Delivery) 및/또는 지속적인 배포(Continuous Deployment)를 의미하며 이 두 용어는 상호 교환적으로 사용

CI/CD 파이프라인을 구성하는 기본 단계와 수행 작업


Source 단계

  • Source 단계에서는 원격 저장소에 관리되고 있는 소스 코드에 변경 사항이 일어날 경우, 이를 감지하고 다음 단계로 전달하는 작업을 수행
    Build 단계
  • Build 단계에서는 Source 단계에서 전달받은 코드를 컴파일, 빌드, 테스트하여 가공
  • Build 단계를 거쳐 생성된 결과물을 다음 단계로 전달하는 작업을 수행
    Deploy 단계
  • Deploy 단계에서는 Build 단계로부터 전달받은 결과물을 실제 서비스에 반영하는 작업을 수행

Docker

도커란?

  • Go언어로 작성된 리눅스 컨테이너 기반으로 하는 오픈소스 가상화 플랫폼
  • 특정한 서비스를 패키징하고 배포하는데 유용한 오픈소스 프로그램
  • 컨테이너에는 라이브러리, 시스템 도구, 코드, 런타임 등 소프트웨어를 실행하는데 필요한 모든 것이 포함

도커를 사용하는 이유

  • 환경 일치성: 다양한 환경에서 동일한 실행 환경을 보장한다. 개발 환경과 운영 환경의 차이로 인한 문제를 방지하며, 응용 프로그램을 어디서든 실행할 수 있다.
  • 편리한 배포: 도커 컨테이너는 이미지로 패키징되어 배포되므로, 어플리케이션 배포가 간단해진다. 이미지를 공유하거나 배포할 때 용이하며, 빠른 확장이 가능하다.
  • 격리된 환경: 도커는 각 컨테이너를 격리된 환경으로 실행하므로, 하나의 컨테이너에서 발생한 문제가 다른 컨테이너에 영향을 주지 않는다.
  • 자원 효율성: 가상 머신과 비교해 더 가볍고 빠르며, 호스트 시스템의 리소스를 효율적으로 활용할 수 있다.
  • 스케일링: 컨테이너 기반 아키텍처는 쉬운 스케일링이 가능하여 요구에 따라 응용 프로그램을 확장할 수 있다.
    --> Docker을 사용하면 환경에 구애받지 않고 애플리케이션을 신속하게 배포, 확장할 수 있다.

도커 사용법

  1. 도커 이미지 빌드: Dockerfile을 작성하여 도커 이미지를 생성
  2. 도커 컨테이너 실행: 이미지를 기반으로 도커 컨테이너를 실행
  3. 컨테이너 네트워킹: 도커 컨테이너 간의 통신을 위해 네트워크 설정을 구성
  4. 컨테이너 관리: 도커 컴포즈를 사용하여 여러 컨테이너를 정의하고 관리할 수 있다.
  5. 이미지 공유 및 배포: 빌드한 이미지를 도커 레지스트리에 업로드하거나, 다른 개발자와 공유할 수 있다. 배포 시에는 도커 이미지를 다운로드하고 컨테이너를 실행하여 애플리케이션을 실행할 수 있다.

도커 이미지, 컨테이너 란?

도커 이미지

  • Docker Image란 컨테이너를 실행할 수 있는 실행파일, 설정 값들을 가지고 있는 것
  • 더 이상 의존성 파일을 컴파일하거나 이것저것 설치할 필요가 없는 상태의 파일을 의미
  • Image를 컨테이너에 담고 실행시키면 해당 프로세스가 동작한다.

도커 이미지의 생성 방식

  • 도커 이미지는 기존 이미지에 추가적인 구성이 필요할 때 다시 다운로드하는 방법이 아닌
    기존이미지에 레이어를 추가하여 구성을 올려주는 방식으로 생성된다.
  • 이미지는 여러 개의 읽기 전용 레이어로 구성되고 파일 추가되면 새로운 레이어가 생성되어 추가되는 것
  • 도커는 여러 개의 레이어를 묶어 하나의 파일시스템으로 사용 가능하도록 함.

도커 이미지와 컨테이너의 차이점

  • 도커 이미지는 설계서, 컨테이너는 설계서로 만들어진 상품
    이미지가 중간에 바꾸게 되더라도 기존 컨테이너는 더 이상 이미지에 영향을 받지 않음.
  • 도커 컨테이너는 이미지를 실행한 상태로 응용프로그램의 종속성과 함께 응용프로그램 자체를 패키징 또는 캡슐화하여 격리된 공간에서 프로세스를 동작시키는 기술

도커 파일

  • 이미지 생성 출발점으로 이미지를 구성하기 위한 명령어들을 작성하여 이미지를 구성할 수 있음.
  • 다시 말해, 만들 이미지에 대한 정보를 기술한 템플릿이라고 보면 됨.
  • 이를 빌드하면 자동으로 이미지가 생성되므로, 도커 파일을 통해 애플리케이션 빌드 및 배포를 자동화할 수 있음.
# Stage 1: Build the application using Gradle with JDK 17
FROM openjdk:17-alpine as builder
WORKDIR /build

# Copy Gradle build files
COPY build.gradle settings.gradle /build/

# Download dependencies without running tests
RUN gradle build -x test --parallel --continue > /dev/null 2>&1 || true

# Copy the rest of the application code
COPY . /build

# Build the application without running tests
RUN gradle build -x test --parallel

# Stage 2: Run the application using Amazon Corretto JDK 17
FROM amazoncorretto:17
WORKDIR /app

# Copy the built JAR file from the builder stage
COPY --from=builder /build/build/libs/*.jar springadvanced.jar

# Expose port 8080 to the outside world
EXPOSE 8080

# Run the JAR file with Java
ENTRYPOINT ["java", "-jar", "springadvanced.jar"]

0개의 댓글