일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- 브랜디
- 프로그래머스 코딩 테스트 연습
- WPF
- Firefox
- c#
- heroku
- 프로그래머스 코딩테스트 연습
- selenium
- 바이오데이터 엔지니어
- Spring Boot
- 스프링 부트와 AWS로 혼자 구현하는 웹 서비스
- FastAPI
- 프로그래머스 월간 코드 챌린지 시즌1
- 스코페2021
- 클린 코드
- Python
- github
- terraform
- Codeforces
- PostgreSQL
- 프로그래머스 코딩테스트 연습문제
- PostgreSQL 설치 시 에러
- git
- Word Cloud
- pycharm
- 프로그래머스 월간 코드 챌린지
- github actions
- 디자인 패턴
- 파이썬
- 애드센스
- Today
- Total
프로그래밍 연습하기
백엔드 프로젝트 (GitHub Action) -4- 본문
저번에는 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 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 |