2024-12-18 CH-6 최종 프로젝트 14 Git Action을 이용한 CI/CD 구축

MOON·2025년 1월 2일
0

내일배움캠프 과제

목록 보기
47/48

오늘은 Git Action을 이용하요 CI/CD를 간단하게 구현해 보았습니다.
먼저 저희 EC2 환경에 대해 소개해 보겠습니다.

EC2 환경 소개

AWS EC2(Elastic Compute Cloud)는 클라우드 환경에서 가상 서버를 제공하는 서비스로, 이 프로젝트에서는 다음과 같은 설정으로 사용하고 있습니다:

  • 인스턴스 타입: AWS EC2 t2.micro와 t2.medium을 사용하여 적절한 성능을 제공.
  • EBS 볼륨(스토리지): 30GB 용량으로 설정되어 있으며, 애플리케이션 및 도커 이미지를 저장하기에 충분한 공간을 제공.
  • 운영체제: Ubuntu를 사용하여 서버 환경을 구성.

필수 소프트웨어

  • Docker와 Docker Compose가 설치되어 컨테이너 기반의 애플리케이션을 실행합니다.
  • Git을 설치하여 GitHub에서 소스 코드를 가져올 수 있습니다.
  • Git 브랜치: dev 브랜치에서 최신 소스 코드를 가져오도록 설정합니다.

깃 허브 워크플로 코드

deploy.yml

name: Deploy to EC2

on:
  push:
    branches: ['dev'] # 또는 원하는 브랜치

jobs:
  deploy:
    runs-on: ubuntu-latest
    steps:
      - name: Deploy to EC2
        uses: appleboy/ssh-action@master
        with:
          host: ${{ secrets.EC2_HOST }}
          username: ${{ secrets.EC2_USERNAME }}
          key: ${{ secrets.EC2_SSH_KEY }}
          port: ${{ secrets.EC2_PORT }}
          script: |
            # 프로젝트 디렉토리로 이동
            cd /home/ubuntu/Peekaboo_TestServer
            git pull origin dev # 최신 코드 가져오기

            # 도커 빌드 캐시 삭제
            docker builder prune -f
            # docker system prune -af
            # 사용되지 않는 이미지를 삭제. ex) none,...
            docker rmi $(docker images -f "dangling=true" -q)

            # Docker Compose 재시작
            docker-compose down || true  # 에러 무시
            yarn docker-compose:build

            # 컨테이너 상태 확인
            docker ps

코드 설명

이 워크플로는 GitHub Actions를 사용하여 dev 브랜치에 코드가 푸시되면 자동으로 EC2 서버에 배포합니다. 주요 단계는 다음과 같습니다:

  1. 이벤트 트리거
  • dev 브랜치에 코드가 푸시될 때 실행.
  1. SSH 연결
  • appleboy/ssh-action@master를 사용해 EC2 서버에 SSH로 접속.
  • GitHub Secrets를 활용해 보안 정보를 관리.
  1. 배포 작업
  • 프로젝트 디렉토리(/home/ubuntu/Peekaboo_TestServer)로 이동.
  • 최신 코드 가져오기: git pull origin dev.
  • Docker 빌드 캐시 및 불필요한 이미지 삭제.
  • Docker Compose로 컨테이너 재시작:
    • docker-compose down || true로 기존 컨테이너 중지.
    • yarn docker-compose:build로 새 컨테이너 빌드.
  • 실행 중인 컨테이너 확인: docker ps.

이렇게 push가 될떄마다 자동으로 최신 코드를 배포하고 컨테이너를 관리하여 개발 및 운영을 간소화할 수 있습니다. 굿


오늘의 회고

팀원들에게 소개하면서 팀원들도 신기해하고 진작에 이걸 도입해볼걸 생각이 많이 들더라구요..하핫 전에 EC2로 서버를 열고 다같이 테스트를 많이 해봤는데 그때마다 힘들게 저기 EC2내에서 수정해서 확인하고 다시 로컬 코드에서도 수정하고 git에다가 올리고 번거로운 일이 많았었는데 그래도 뒤늦게 이것을 알고 적용하니 너무 편해서 좋네요. 굿 앞으로도 많이 이용할 것 같습니다.

오늘도 화이팅!

profile
안녕하세요

0개의 댓글

관련 채용 정보