프로그래밍 연습하기

백엔드 프로젝트 (GitHub Action) -4- 본문

웹 프로젝트

백엔드 프로젝트 (GitHub Action) -4-

john.k 2022. 2. 2. 16:16
반응형

저번에는 FastAPI 앱을 만들어서 Github에 올린 후, Heroku 앱과 연결하여 배포했습니다.

그 과정을 좀 바꿔보도록 하겠습니다.

 

전체적인 흐름은 Github 저장소의 Branch를 develop, master(main)로 나누어서

develop에서 개발을 해서 master에 Pull request를 만들면 테스트를 하고 통과하는 것을 확인하고 merge 한 뒤,

master에서 heroku로 배포하게 됩니다.

 

그래서 기존 Github 저장소에서 develop Branch를 만듭니다.

 

그리고 다음과 같은 Github Action 두개를 추가해서 바꿀 수 있습니다.

# .github/workflows/python_test.yml

name: Python application

on: pull_request

jobs:
  build:

    runs-on: ubuntu-latest
    steps:
    - uses: actions/checkout@v2
    - name: Set up Python 3.9
      uses: actions/setup-python@v2
      with:
        python-version: 3.9

    - name: Setup PostgreSQL
      uses: Harmon758/postgresql-action@v1.0.0
      with:
        postgresql version: '13'
        postgresql db: 'sample_app_dev'
        postgresql user: 'postgres'
        postgresql password: '1234'

    - name: Install dependencies
      run: |
        python -m pip install --upgrade pip
        if [ -f ./requirements.txt ]; then pip install -r ./requirements.txt; fi

    - name: Test with pytest
      env:
        TEST: "TEST"
      run: |
        cd app
        PYTHONPATH=./app pytest tests -q

이 액션은 pull request시 테스트를 실행하는 액션입니다.

프로젝트에서 사용하는 PostgreSQL을 설치하고 pytest를 실행합니다.

 

# .github/workflows/deploy.yml

name: Heroku Deploy

on:
  push:
    branches: [ master ]

jobs:
  build:
    runs-on: ubuntu-latest

    steps:
    - uses: actions/checkout@v2
    - name: Set up Python 3.9.10

      uses: actions/setup-python@v2
      with:
        python-version: 3.9.10

    - name: Deploy to Heroku
      # You may pin to the exact commit or the version.
      # uses: AkhileshNS/heroku-deploy@79ef2ae4ff9b897010907016b268fd0f88561820
      uses: AkhileshNS/heroku-deploy@v3.12.12
      with:
        # This will be used for authentication. You can find it in your heroku homepage account settings
        heroku_api_key: ${{ secrets.HEROKU_API_KEY }}
        # Email that you use with heroku
        heroku_email: ${{ secrets.HEROKU_EMAIL }}
        # The appname to use for deploying/updating
        heroku_app_name: ${{ secrets.HEROKU_APP_NAME}}

 

이 액션은 master 브랜치에 push되었을 때 Heroku에 배포하는 액션입니다.

배포할 GitHub 저장소 Secret에

HEROKU_API_KEY,  HEROKU_EMAIL, HEROKU_APP_NAME을 설정해줘야 합니다.

 

이렇게 PR을 만들면 GitHub Action (Python application / build (pull_request))이 돌아가는 것을 확인할 수 있습니다.

merge하면 master에 push 되면서 Heroku에 배포하는 액션이 돌아 배포하게 됩니다.

 

 

https://github.com/br-kim/fastapi-project/tree/master/.github/workflows

 

GitHub - br-kim/fastapi-project

Contribute to br-kim/fastapi-project development by creating an account on GitHub.

github.com

여기에서도 Github Action 코드를 확인해보실 수 있습니다.

 

이렇게 Terraform으로 클라우드 서비스를 생성한 뒤, Github에 코드를 올려 테스트와 배포를 자동으로 하는 과정을 한번 둘러 보았습니다.

 

앞서 말씀드렸다시피 이 과정들이 Best Practice 완벽한 모범 사례라고 보기는 힘들기때문에

혹시 고쳐볼 부분이 있다면 알려주시면 감사하겠습니다.

 

이런식으로 전체적인 흐름을 한번 살펴보고

Terraform이 아닌 다른 IaC 서비스를 사용한다던가

Heroku가 아닌 다른 클라우드 서비스를 사용해볼 수도 있고,

아니면 FastAPI가 아닌 Django나 다른 언어의 웹 프레임워크를 사용해볼 수도 있고,

프론트엔드를 추가해볼 수도 있는 등

다양하게 변화를 줄 수 있지 않을까 싶습니다.

반응형

'웹 프로젝트' 카테고리의 다른 글

백엔드 프로젝트 (FastAPI, Heroku) -3-  (0) 2022.02.01
백엔드 프로젝트(Terraform) -2-  (0) 2022.01.16
백엔드 프로젝트 -1-  (0) 2022.01.16
Comments