-
Flask Project - MyBlog CI/CD 적용하기(feat. Github Actions)프로젝트 2024. 4. 19. 14:11반응형
지금까지 docker-compose를 통해 배포까지 해보았습니다. 이제 CI/CD 시스템을 구축해보겠습니다.
1. 배포 자동화(CI/CD)
배포 자동화를 위해 사용하는 툴은 Jenkins, AWS CodeBuild, Github Actions 등 다양하게 존재하는데요. 보통 Jenkins와 Github Actions 툴을 많이 사용한다고 합니다. 각각을 비교해보자면 아래와 같습니다.
Github Actions
장점: Github 저장소와 쉽게 연동 가능해 빠르게 CI/CD를 구축할 수 있다.
단점: 비교적 최근에 나온 툴이라 레퍼런스가 상대적으로 적다
Jenkins
장점: 레퍼런스가 많고, 다양한 플러그인들이 지원되어 유연성이 뛰어나다.
단점: 초반 설정과 관리가 다소 복잡하다.
너무 간단하게 정리한 것 같지만, 어쨋든 저는 빠르게 CI/CD 시스템을 구축해서 개발-배포 싸이클을 단축시키는게 목표기때문에 Github Actions를 선택했습니다.
2. CI/CD 구조
전체 구조를 설명하기 전에, CI/CD 시스템 인프라 구축을 할 때 많은 도움이 된 블로그 소개해드립니다.
Github Actions로 CI/CD 구축하기
해당 블로그에서는 Java Spring Boot 프로젝트를 Github Actions를 통해 배포하셨습니다. 저는 해당 블로그 글을 참고해 Flask 프로젝트를 배포해보았습니다. 사실 위 블로그 글과 제 글은 완전 별개라고 봐도 됩니다. 다만 해당 블로그 글을 통해 Github Actions과 AWS를 연계할 때 신경써야 될 부분, 참고할만한 사이트 등을 학습했기 때문에 다른분들에게 추천하고 싶었습니다. 참고해주세요 ㅎㅎ
CI/CD 구조를 이미지로 보여드릴텐데, ERD.drawio 를 통해 만들었습니다. 프로젝트 아키텍쳐 그리기 좋고, 프로그램 설치 필요없으니 좋아요. 나중에 DB 스키마 구조 설계할때도 사용하기 좋습니다. 참고해주세요.
docker-compose CI/CD 구조 Github Actions을 통한 CI/CD 시스템 순서는 아래와 같습니다.
1. 특정한 브랜치에 Push(or Merge) 동작을 수행합니다.
2. 해당 동작을 트리거로 설정한 Actions을 수행합니다.
3. EC2 인스턴스로 접속합니다.
4. 배포를 진행합니다.
3. Github Actions yml 파일 생성
Github Actions을 통해 workflow를 생성하고 build-deploy.yml 파일을 생성해보겠습니다.
Github Actions Start build-deploy.yml name: Deploy to EC2 on: pull_request: branches: [ "main" ] # ------------------------- 작업 설정 ------------------------- jobs: deploy: runs-on: ubuntu-latest steps: - name: SSH into EC2 and deploy uses: appleboy/ssh-action@master with: host: ${{ secrets.EC2_HOST }} username: ${{ secrets.EC2_USERNAME }} key: ${{ secrets.EC2_PRIVATE_KEY }} port: ${{ secrets.EC2_SSH_PORT }} script: | cd MyBlog_project git pull origin main chmod +x run_docker.sh ./run_docker.sh
1. on
이벤트 트리거를 정의하는 섹션입니다. 즉, 어떤 이벤트가 발생했을 때 workflow를 실행할지 지정할 수 있습니다.
본 프로젝트에서는 main 브랜치로 pull request가 발생했을 때 트리거가 되도록 했습니다.
2. jobs
작업을 정의하는 섹션입니다. 여기에 각 작업에 대한 세부 구성이 포함됩니다.
해당 파일을 작성하고 push를 해보면 아래처럼 deploy가 성공적으로 이루어지는 것을 알 수 있습니다.
Update build-deploy.yml 클릭해보시면 아래처럼 로그를 확인해 볼 수도 있습니다.
반응형'프로젝트' 카테고리의 다른 글
Flask Project - MyBlog contactForm, mypage 추가하기 (2) 2024.04.23 Flask Project - MyBlog 댓글 추가하기(feat. flask-migrate) (0) 2024.04.22 Flask Project - MyBlog 배포하기(nginx+gunicorn+flask with docker-compose) (3) 2024.04.18 Flask Project - MyBlog views(post 생성,수정,삭제) with unittest (0) 2024.04.11 Flask Project - MyBlog auth(회원가입, 로그인, 로그아웃) with unittest (1) 2024.04.09