본문 바로가기
Docker

[Docker] CI/CD

by goblin- 2024. 10. 28.

CI/CD(Continuous Integration/Continuous Delivery 또는 Continuous Deployment)는 소프트웨어 개발에서 코드의 통합과 배포를 자동화하여 개발 속도와 품질을 높이는 방법입니다. CI/CD 파이프라인은 소스 코드의 변경 사항을 자동으로 빌드, 테스트, 배포하여, 코드가 안정적으로 유지되면서도 빠르게 릴리스될 수 있도록 돕습니다.

 

CI/CD의 주요 구성 요소

 

1. CI (Continuous Integration, 지속적 통합)

목적: 개발자가 코드 변경 사항을 자주 통합하여 코드 품질을 검증하는 단계입니다.

과정: 개발자가 코드를 변경하여 Git에 푸시하면 CI 도구가 이를 감지하고 자동으로 빌드와 테스트를 수행합니다. 이를 통해 코드에 문제가 있는지 빠르게 피드백을 받을 수 있습니다.

주요 작업:

빌드: 코드를 컴파일하고 애플리케이션을 빌드합니다.

테스트: 자동화된 테스트(유닛 테스트, 통합 테스트)를 실행하여 코드의 품질을 검증합니다.

 

2. CD (Continuous Delivery, 지속적 배포)

목적: CI 과정을 통과한 코드를 운영 환경에 배포할 준비가 완료된 상태로 유지하는 것입니다.

과정: 모든 테스트가 통과된 코드가 실제 운영 환경으로 배포될 준비가 됩니다. 최종 배포 전에 사람이 수동으로 승인하거나 추가 검토를 하는 것이 일반적입니다.

장점: CD를 통해 코드가 항상 배포 준비 상태로 유지되므로, 새 기능이나 수정 사항을 빠르게 사용자에게 제공할 수 있습니다.

 

3. CD (Continuous Deployment, 지속적 배포/자동 배포)

목적: 테스트와 빌드를 통과한 코드를 자동으로 운영 환경에 배포하는 것입니다.

과정: 수동 승인 없이 자동으로 코드를 배포하므로, 변경 사항이 곧바로 사용자에게 반영됩니다.

장점: 코드가 배포되기까지의 시간을 단축하고, 운영 환경에 빠르게 변화를 반영할 수 있어 사용자 피드백을 신속히 수용할 수 있습니다.

 

CI/CD 파이프라인 예시

 

예시: GitHub Actions를 사용한 CI/CD 파이프라인

 

아래 예시는 GitHub Actions를 통해 코드가 푸시될 때 자동으로 빌드와 테스트가 수행되고, 성공 시 AWS EC2에 배포되는 CI/CD 파이프라인입니다.

 

.yml 파일 예시

name: CI/CD Pipeline

# 이벤트 트리거 설정: main 브랜치로의 푸시 또는 PR 시 실행
on:
  push:
    branches:
      - main
  pull_request:
    branches:
      - main

jobs:
  # 1. CI 단계: build-and-test 작업
  build-and-test:
    runs-on: ubuntu-latest  # 최신 우분투 환경에서 실행

    steps:
      - name: Check out code
        uses: actions/checkout@v2

      - name: Set up Node.js
        uses: actions/setup-node@v2
        with:
          node-version: '14'

      - name: Install dependencies
        run: npm install

      - name: Run tests
        run: npm test

  # 2. CD 단계: deploy 작업
  deploy:
    runs-on: ubuntu-latest
    needs: build-and-test  # build-and-test 작업 성공 시에만 실행
    if: success()

    steps:
      - name: Check out code
        uses: actions/checkout@v2

      - name: Deploy to AWS EC2
        env:
          AWS_ACCESS_KEY_ID: ${{ secrets.AWS_ACCESS_KEY_ID }}
          AWS_SECRET_ACCESS_KEY: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
        run: |
          ssh -o StrictHostKeyChecking=no -i ~/.ssh/your-key.pem ec2-user@your-ec2-ip 'bash -s' < ./deploy/deploy.sh

 

파이프라인 설명

 

1. build-and-test 작업 (CI 단계):

push 또는 pull_request 이벤트가 발생할 때, 코드가 자동으로 빌드되고 테스트됩니다.

이 과정에서 빌드가 성공하고 모든 테스트가 통과하면 CI 단계를 성공으로 표시합니다.

CI 단계에서 오류가 발생하면, GitHub Actions에서 해당 작업을 실패로 표시해 주며, 이를 통해 코드 품질을 검증할 수 있습니다.

 

2. deploy 작업 (CD 단계):

build-and-test 작업이 성공했을 때만 실행되며, AWS EC2 서버로 자동 배포를 수행합니다.

배포 과정에서는 GitHub Actions에 저장된 AWS 보안 자격 증명을 사용하여 AWS에 접근하고, SSH로 EC2 서버에 접속하여 deploy.sh 스크립트를 실행합니다.

이 스크립트는 배포 작업을 진행하여 새로운 코드가 EC2에 반영되도록 합니다.

(로컬로 설정하면 로컬에 자동으로 pull 되도록 설정)

 

파이프라인 단계 요약

 

1. 개발자가 main 브랜치에 코드를 푸시

2. GitHub Actions가 CI 파이프라인(build-and-test)을 실행

코드 빌드 및 테스트

성공 시 CD 단계로 이동

3. **CD 단계(deploy)**가 실행되어 AWS EC2에 자동 배포

AWS EC2에 코드 반영, 운영 환경에 배포 완료

 

요약

 

CI는 코드의 빌드와 테스트 과정을 자동화하여 코드 품질을 유지하고 빠르게 피드백을 받는 단계입니다.

CD는 검증된 코드를 운영 환경에 배포하는 과정으로, 수동 승인 여부에 따라 Continuous DeliveryContinuous Deployment로 나뉩니다.

GitHub Actions와 같은 CI/CD 도구를 사용하면 YAML 파일을 통해 CI/CD 파이프라인을 정의할 수 있으며, 코드 푸시부터 배포까지의 모든 과정이 자동화됩니다.

'Docker' 카테고리의 다른 글

[Docker] Docker Compose  (0) 2024.10.28
[Docker] Docker를 이용한 Spring 프로젝트  (0) 2024.10.28
[Docker] docker 기본명령어  (4) 2024.10.28
[Docker] docker image & container  (1) 2024.10.28
[Docker] docker의 기초  (0) 2024.10.28