본문 바로가기
개발/웹

Django 커머스 보일러플레이트 - (5) GitHub Actions CI/CD

by pandatta 2023. 5. 4.

Django 커머스 보일러플레이트 시리즈

(1) 프로젝트 요구사항과 다이어그램 모델링
(2) 장고/DRF 모델, 시리얼라이저, 뷰
(3) 유닛 테스트, drf-yasg API 문서화
(4) Nginx 웹 서버와 도커 컴포즈, AWS ECS 배포
(5) GitHub Actions CI/CD

안녕하세요, 판다타입니다.

한동안 파이썬 웹 프레임워크 삼대장 플라스크(Flask), 장고(Django), 패스트API(FastAPI) 중, 회사에서는 사용하지 않는 장고를 이용해 e-커머스(e-commerce) 제작에 사용할 수 있는 보일러플레이트(boilerplate)를 만들어보았습니다. 진행한지는 꽤 되어서 한꺼번에 몰아서 작성하다보니 자세한 설명을 하기는 어렵고... 여러분의 장고 프로젝트 작성에 도움이 될까 하여 간단하게 몇 가지를 정리해보았습니다. 자세한 소스코드는 Djarf GitHub 저장소를 참고해주시고, 궁금한 점은 댓글이나 메일로 문의해주세요.

GitHub Actions workflows YAML 설정 파일 생성 (GitHub Actions ECS 배포자동화 by Woosik Kim 글 참고)

# .github/workflows/deployment.yaml
name: Deployment
run-name: Deployment of ${{ github.repository }} through AWS ECS
on:
  push:
    branches: ["main"]
  pull_request:
    branches: ["main"]
jobs:
  deployment:
    runs-on: ubuntu-latest
    env:
      ECR_URI: ${{ secrets.ECR_URI }}
      DJANGO_SECRET_KEY: ${{ secrets.DJANGO_SECRET_KEY }}
      DB_PASSWORD: ${{ secrets.DB_PASSWORD }}
      DB_HOST: ${{ secrets.DB_HOST }}
    steps:
      - name: Checkout
        uses: actions/checkout@v3
      - name: Setup Python
        uses: actions/setup-python@v4
        with:
          python-version: 3.9
      - name: Configure AWS credentials
        uses: aws-actions/configure-aws-credentials@v1
        with:
          aws-region: ap-northeast-2
          aws-access-key-id: ${{ secrets.AWS_ACCESS_KEY_ID }}
          aws-secret-access-key: ${{ secrets.AWS_SECRET_ACCESS_KEY }}
      - name: Transfers authority from AWS ECR to Docker
        run: >
          aws ecr get-login-password |
          docker login --username AWS --password-stdin $ECR_URI
      - name: Build Docker image with compose
        run: docker compose build
      - name: Push Docker image to AWS ECR with compose
        run: docker compose push
      - name: Install AWS ECS CLI
        run: >
          sudo curl -Lo /usr/local/bin/ecs-cli
          https://amazon-ecs-cli.s3.amazonaws.com/ecs-cli-linux-amd64-latest
      - name: Apply execute permissions to ECS CLI binary
        run: sudo chmod +x /usr/local/bin/ecs-cli
      - name: Deploy updating AWS ECS service with AWS CLI
        run: >
          aws ecs update-service --service djarf --task-definition djarf
          --cluster djarf --force-new-deployment

댓글