임베디드 관련 카테고리/Kubernates

CI/CD 개요, 배포 자동화

CBJH 2025. 1. 9.
728x90
반응형

CI/CD는 소프트웨어 개발과 배포를 자동화하기 위한 두 가지 주요 개념인 **지속적 통합(Continuous Integration)**과 **지속적 배포(Continuous Delivery/Deployment)**를 의미합니다. 이를 통해 개발 주기를 가속화하고, 품질을 유지하며, 애플리케이션 배포를 자동화할 수 있습니다.


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

정의

CI는 개발자들이 작성한 코드를 자주 메인 브랜치에 병합하고, 병합된 코드가 자동으로 빌드 및 테스트를 통과하도록 설정하는 프로세스입니다.

목적

  • 코드 병합 시 발생하는 충돌을 신속히 해결.
  • 자동화된 테스트로 코드 품질 유지.
  • 일관된 빌드 프로세스 제공.

주요 구성 요소

  1. 코드 병합: 여러 개발자가 작업한 코드를 메인 브랜치에 자주 병합.
  2. 자동화된 빌드: 병합된 코드를 빌드.
  3. 자동화된 테스트: 단위 테스트(Unit Test), 통합 테스트(Integration Test) 실행.
  4. 알림: 테스트 실패 시 개발자에게 알림.

2. CD (Continuous Delivery/Deployment: 지속적 배포)

정의

CD는 CI를 통해 테스트를 통과한 코드를 프로덕션 환경 또는 스테이징 환경에 자동으로 배포하는 프로세스입니다.

CD의 종류

  1. Continuous Delivery (지속적 전달): 배포 직전까지 자동화하고, 프로덕션 배포는 수동 트리거.
  2. Continuous Deployment (지속적 배포): 테스트를 통과한 코드를 자동으로 프로덕션 환경에 배포.

주요 구성 요소

  1. 스테이징 환경 배포: 프로덕션 배포 전 테스트 환경에서 최종 테스트 실행.
  2. 자동화된 프로덕션 배포: 코드 승인 후 프로덕션 서버로 배포.
  3. 모니터링: 배포 후 애플리케이션 상태를 지속적으로 모니터링.

3. CI/CD의 동작 흐름

  1. 코드 푸시:
    • 개발자가 작성한 코드를 리모트 리포지토리에 푸시.
    • GitHub, GitLab 등에서 처리 가능.
  2. CI 도구가 코드 병합 및 빌드:
    • Jenkins, GitHub Actions, GitLab CI/CD 등이 빌드와 테스트를 자동화.
  3. 자동화된 테스트 실행:
    • 단위 테스트 및 통합 테스트 실행.
  4. CD 파이프라인 시작:
    • 스테이징 또는 프로덕션 환경에 코드 배포.
  5. 모니터링 및 피드백:
    • 배포 후 애플리케이션 상태를 모니터링하고 롤백 처리.

4. CI/CD의 도구

주요 도구

  1. Jenkins: 오픈소스 CI/CD 도구로 높은 커스터마이징 가능.
  2. GitHub Actions: GitHub에 내장된 CI/CD 도구.
  3. GitLab CI/CD: GitLab에 통합된 강력한 DevOps 도구.
  4. CircleCI: 클라우드 기반의 빠른 CI/CD 서비스.
  5. Travis CI: 오픈소스 프로젝트에 적합한 CI 도구.

5. CI/CD의 장점

  1. 개발 속도 향상:
    • 자동화된 빌드와 테스트로 개발 속도 증가.
  2. 빠른 피드백:
    • 코드 병합 후 발생하는 문제를 신속히 파악 가능.
  3. 일관성 유지:
    • 프로세스 자동화로 사람의 실수를 줄임.
  4. 빠른 배포:
    • 기능 배포 속도가 빨라져 사용자 피드백을 더 빠르게 반영.

6. 실제 CI/CD 파이프라인 예제

GitHub Actions 설정 예제

.github/workflows/ci-cd.yml 파일 작성:

name: CI/CD Pipeline

on:
  push:
    branches:
      - main

jobs:
  build:
    runs-on: ubuntu-latest

    steps:
    - name: Checkout code
      uses: actions/checkout@v3

    - name: Install dependencies
      run: |
        sudo apt-get update
        sudo apt-get install -y build-essential

    - name: Build the application
      run: make

    - name: Run tests
      run: make test

  deploy:
    runs-on: ubuntu-latest
    needs: build

    steps:
    - name: Deploy to production
      run: |
        scp ./app user@production-server:/var/www/app

7. 결론

  1. CI: 코드 병합 후 빌드 및 테스트를 자동화.
  2. CD: 테스트를 통과한 코드를 자동 또는 수동으로 배포.
  3. 결과:
    • 소프트웨어 개발 속도가 빨라지고 안정성이 높아짐.
    • 자동화된 프로세스를 통해 개발과 운영의 효율성을 극대화.

이미지 출처

'임베디드 관련 카테고리 > Kubernates' 카테고리의 다른 글

GitLab 개요  (0) 2025.01.10

댓글