Header Banner
GG Logo

Future Engineering

기술의 최전선을 기록합니다.

기술 자료/BackEnd/Docker와 GitHub를 이용한 CI/CD 파이프라인 구축 가이드

Docker와 GitHub를 이용한 CI/CD 파이프라인 구축 가이드

BackEnd12개월 전

1. Dockerfile 작성

프로젝트 루트에 Dockerfile을 생성합니다.

일반적으로 Dockerfile은 확장자를 사용하지 않습니다. 즉, 파일 이름은 단순히 Dockerfile이 됩니다.

FROM node:14
WORKDIR /app
COPY package*.json ./
RUN npm install
COPY . .
EXPOSE 3000
CMD ["npm", "start"]

 

2. GitHub Actions 워크플로우 설정

.github/workflows/main.yml 파일을 생성합니다.

기타 GitHub Actions 워크플로우, 예를들어 특정 시간에 자동 배포 등 별도의 설정이 존재한다면 코드를 복사 붙여넣기 하시면 안됩니다.

name: CI/CD Pipeline

on:
  push:
    branches: [ main ]
  pull_request:
    branches: [ main ]

jobs:
  build-and-deploy:
    runs-on: ubuntu-latest

    steps:
    - uses: actions/checkout@v2

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

    - name: Install dependencies
      run: npm ci

    - name: Run tests
      run: npm test

    - name: Build and push Docker image
      env:
        DOCKER_USERNAME: ${{ secrets.DOCKER_USERNAME }}
        DOCKER_PASSWORD: ${{ secrets.DOCKER_PASSWORD }}
      run: |
        docker build -t $DOCKER_USERNAME/my-app:${{ github.sha }} .
        echo $DOCKER_PASSWORD | docker login -u $DOCKER_USERNAME --password-stdin
        docker push $DOCKER_USERNAME/my-app:${{ github.sha }}

    - name: Deploy to server
      env:
        PRIVATE_KEY: ${{ secrets.SERVER_SSH_KEY }}
        HOST: ${{ secrets.SERVER_HOST }}
        USER: ${{ secrets.SERVER_USER }}
      run: |
        echo "$PRIVATE_KEY" > private_key && chmod 600 private_key
        ssh -o StrictHostKeyChecking=no -i private_key ${USER}@${HOST} '
          docker pull ${{ secrets.DOCKER_USERNAME }}/my-app:${{ github.sha }}
          docker stop my-app || true
          docker rm my-app || true
          docker run -d --name my-app -p 3000:3000 ${{ secrets.DOCKER_USERNAME }}/my-app:${{ github.sha }}
        '

 

3. GitHub Secrets 설정

GitHub 레포지토리의 Settings > Secrets에서 다음 시크릿을 추가합니다.

  • DOCKER_USERNAME: Docker Hub 사용자명

  • DOCKER_PASSWORD: Docker Hub 비밀번호

  • SERVER_SSH_KEY: 배포 서버의 SSH 개인키

  • SERVER_HOST: 배포 서버의 IP 주소 또는 호스트명

  • SERVER_USER: 배포 서버의 SSH 사용자명

 

파이프라인 실행

  1. 코드를 변경하고 GitHub main 브랜치에 push합니다.

  2. GitHub Actions 탭에서 워크플로우 실행 상태를 확인합니다.

  3. 성공적으로 완료되면, 애플리케이션이 서버에 배포됩니다.

 

4. 단계 설명

  1. 코드 체크아웃: GitHub 레포지토리에서 최신 코드를 가져옵니다.

  2. 의존성 설치 및 테스트: Node.js 환경을 설정하고, 의존성을 설치한 후 테스트를 실행합니다.

  3. Docker 이미지 빌드 및 푸시: 애플리케이션의 Docker 이미지를 생성하고 Docker Hub에 푸시합니다.

  4. 서버 배포: SSH를 통해 원격 서버에 접속하여 최신 Docker 이미지를 pull하고 실행합니다.

 

CI/CD 파이프라인은 코드 변경사항을 자동으로 테스트하고 배포하여 개발 프로세스의 효율성과 신뢰성을 크게 향상시킬 수 있습니다.