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 Delivery와 Continuous 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 |