CI/CD 파이프라인 구축하기 (Jenkins, GitLab CI 등)

beluga000·2024년 9월 9일
0
post-thumbnail

CI/CD 개념

CI (Continuous Integration)

개발자가 코드를 주기적으로 병합하고, 자동화된 테스트를 통해 코드의 품질을 보장하는 과정으로, CI는 코드 충돌을 줄이고, 테스트 주기를 짧게 유지함으로써 문제를 빠르게 발견할 수 있게 합니다.

CD (Continuous Deployment/Delivery)

코드가 테스트를 통과하면 자동으로 배포까지 진행됩니다. Delivery는 테스트 통과 후 준비 상태로 배포되기 직전까지만 자동화하는 반면, Deployment는 실제로 프로독션 환경에까지 배포하는 자동화를 말합니다.

CI/CD 파이프라인의 주요 구성 요소

소스 코드 저장소(Git 등)

코드가 저장되고 변경 사항이 관리되는 곳으로, GitHub / GitLab 등이 대표적인 도구

빌드(Build)

코드가 병합되면 애플리케이션을 빌드하는 단계입니다. 이 과정에서 의존성 패키지를 설치하고, 애플리케이션을 실행 가능한 상태로 만듭니다.

테스트(Test)

빌드된 애플리케이션에 대해 자동화된 테스트를 실행합니다. 단위 테스트, 통합 테스트, 회귀 테스트 등 여러 테스트를 통해 코드 품질을 검증합니다.

배포(Deploy)

테스트를 통과한 애플리케이션을 운영 환경 또는 스테이징 환경에 배포합니다.

Jenkins로 CI/CD 파이프라인 구축

  1. Jenkins 설치 및 설정

Jenkins는 오픈 소스 자동화 서버로, 다양한 플러그인을 통해 CI/CD 파이프라인을 구현할 수 있습니다.

Jenkins를 서버에 설치합니다.

sudo apt update
sudo apt install openjdk-11-jre
wget -q -O - https://pkg.jenkins.io/debian/jenkins.io.key | sudo apt-key add -
sudo sh -c 'echo deb http://pkg.jenkins.io/debian-stable binary/ > /etc/apt/sources.list.d/jenkins.list'
sudo apt update
sudo apt install jenkins

플러그인 설치 : Git, Maven, Docker와 같은 플러그인을 설치합니다. Jenkins의 플러그인 관리 기능을 통해 다양한 도구를 통합할 수 있습니다.

  1. 파이프라인 설정

Jenkins 대시보드에서 새로운 파이프라인 프로젝트를 생성하고 Jenkinsfile을 통해 빌드, 테스트, 배포 과정을 정의합니다.

pipeline {
   agent any
   stages {
       stage('Build') {
           steps {
               sh 'mvn clean package'
           }
       }
       stage('Test') {
           steps {
               sh 'mvn test'
           }
       }
       stage('Deploy') {
           steps {
               sh 'scp target/*.jar user@server:/path/to/deploy'
           }
       }
   }
}
  1. GitHub와의 통합

Jenkins와 GitHub 저장소를 연동하여, GitHub에 새로운 코드가 푸시될 때마다 자동으로 빌드 및 테스트가 실행되도록 웹훅(webhook)을 설정할 수 있습니다.

GitLab CI/CD 파이프라인 구축

  1. .gitlab-ci.yml 파일 작성

GitLab에서는 프로젝트 루트에 .gitlab-ci.yml 파일을 추가하여 파이프라인을 정의합니다. 이 파일에는 빌드, 테스트, 배포 단계를 명시합니다.

stages:
  - build
  - test
  - deploy

build_job:
  stage: build
  script:
    - mvn clean package

test_job:
  stage: test
  script:
    - mvn test

deploy_job:
  stage: deploy
  script:
    - scp target/*.jar user@server:/path/to/deploy
  1. GitLab Runner 설정

GitLab Runner는 GitLab에서 파이프라인을 실행하는 에이전트입니다. 이를 설치하고, 실행 환경에서 파이프라인이 실행되도록 설정합니다.

sudo apt-get install gitlab-runner
gitlab-runner register

CI/CD 파이프라인 실행

파이프라인을 설정한 후, 소스 코드에 변경이 발생하면 Jenkins 또는 GitLab이 자동으로 빌드, 테스트, 배포 단계를 진행하게 됩니다. 이 과정을 통해 배포 주기를 단축하고, 안정적인 소프트웨어 개발 및 운영이 가능합니다.

CI/CD 파이프라인 최적화

  1. 캐시 사용 : 빌드 속도를 높이기 위해 의존성 파일 또는 Docker 이미지 등을 캐싱할 수 있습니다.
  2. 병렬 테스트 : 여러 테스트를 병렬로 실행하여 파이프라인의 속도를 최적화할 수 있습니다.
  3. Blue-Green 배포 : 무중단 배포를 위해 Blue-Green 배포 전략을 적용하여 안정적인 배포를 자동화할 수 있습니다.

최적화 방법 중 병렬 테스트 예시를 구현해보겠습니다.

Maven을 이용한 병렬 테스트 (Java Project)

Surefire 또는 Failsafe 플러그인을 활용해 병렬 테스트를 쉽게 적용할 수 있습니다.

pom.xml파일에 병렬 테스트 설정을 추가합니다.

<build>
    <plugins>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-surefire-plugin</artifactId>
            <version>2.22.2</version>
            <configuration>
                <parallel>methods</parallel> <!-- tests (테스트 단위), classes (클래스 단위) 설정 가능 -->
                <threadCount>4</threadCount> <!-- 병렬로 실행할 스레드 개수 -->
                <perCoreThreadCount>false</perCoreThreadCount>
            </configuration>
        </plugin>
    </plugins>
</build>

parallel은 테스트를 병렬로 실행하는 단위이며 methods는 테스트 메서드 단위로 병렬 처리하고, classes는 클래스 단위로 병렬 처리합니다.
threadCount는 병렬로 실행할 스레드의 수 입니다. CPU 코어 수에 맞춰 설정하거나 테스트의 복잡성에 따라 조정하면 됩니다.
perCoreThreadCount는 true로 설정하면 CPU 코어당 스레드 수를 자동으로 설정합니다.

이후 Surefire 플러그인을 아래 명령어로 실행하면 병렬 테스트가 실행됩니다.

mvn clean test

Python(PyTest)를 이용한 병렬 테스트

Python의 pytest 프레임워크에서도 병렬 테스트를 실행할 수 있으며, pytest-xdist 플러그인을 사용하면 가능합니다.

  1. pytest-xdist 설치
pip install pytest-xdist
  1. 병렬 테스트 실행

pytest -n 옵션을 사용하여 여러 프로세스를 병렬로 실행할 수 있습니다.

pytest -n 4

위 명령어는 4개의 워커(worker)를 사용하여 병렬로 테스트를 실행

profile
Developer

0개의 댓글