일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 | 31 |
- Priority Queue
- 코테
- 알고리듬
- hash table
- Trie
- 모의SW역량테스트
- 코딩테스트
- django
- 알고리즘
- Linked list
- BFS
- Bruth Force
- SWEA
- CSV
- JavaScript
- SQL
- gpdb
- Algorithm
- spring boot
- programmers
- DFS
- Vue.js
- Python
- Data Structure
- aws
- 시뮬레이션
- boj
- 구현
- GitHub
- Back tracking
- Today
- Total
hotamul의 개발 이야기
[Flask] Github Action CI (Flask & Docker) 본문
지난 포스트 [Flask] Flask & docker-compose wait for db에서 docker-compose를 이용할 때 Flask app이 db보다 먼저 실행되는 문제를 해결했었다.
이번 포스트에는 Github Action을 이용해 CI 구축을 해보고자 한다.
docker hub token setting
[Flask] Flask & Docker (Dockerfile 작성 방법), [Flask] Flask & docker-compose wait for db을 보면 python:3.8-alpine3.13
, postgres:13-alpine
이미지를 사용하고 있다. 따라서 Github Action에서 해당 이미지를 가져올 수 있도록 Docker hub user, Docker hub token을 설정해줘야 한다.
docker hub에 로그인 한 뒤 Account Settings에 들어간다.
그리고 Security - New Access Token에 들어간다.
원하는 이름으로 Description을 작성하고 Generate 버튼을 클릭한다.
docker login -u 유저이름
에서 유저이름을 복사하고 Github repository로 이동한다. (위에 생성된 token은 창을 닫으면 다시 볼 수 없으니 주의하자. 사실 다시 만들면 되긴 한다.)
Github repository - Settings - Secrets - Actions 메뉴에 들어간 뒤 New repository secret을 클릭한다.
그리고 Name은 DOCKERHUB_USER
Value는 복사했던 유저이름을 붙여넣은 다음 저장한다.
Token 도 똑같이 해서 아래와 같이 생성하면 Docker Hub에 로그인 할 준비는 끝났다.
.github/workflows/checks.yml
이제 yml 파일을 작성해 보자.
해당 프로젝트 root 위치(Dockerfile, docker-compose.yml이 있는 위치)에 .github/workflows/checks.yml 파일을 생성한다.
---
name: Checks
on: [push]
jobs:
test-lint:
name: Test and Lint
runs-on: ubuntu-20.04
steps:
- name: Login to Docker Hub
uses: docker/login-action@v1
with:
username: ${{ secrets.DOCKERHUB_USER }}
password: ${{ secrets.DOCKERHUB_TOKEN }}
- name: Checkout
uses: actions/checkout@v2
- name: Test
run: docker-compose run --rm app sh -c "sh ./scripts/wait-for-postgres.sh -- pytest"
- name: Lint
run: docker-compose run --rm app sh -c "flake8"
나는 모든 branch에 해당 action이 실행되게 하기 위해서 따로 branch를 설정하지는 않았다.
간단하게 설명하면 action job의 이름은 Test and Lint이고 ubuntu-20.04 버전을 사용한다.
steps
부분을 보면 총 4단계로 구성되어 있다.
- Docker Hub에 로그인
Github Settings - Secrets 에 생성했던DOCKERHUB_USER
,DOCKERHUB_TOKEN
을 사용하여 docker hub에 로그인한다. - Git Checkout
GitHub의 코드 저장소에 올려둔 코드를 Github Action이 실행되는 서버로 내려받은 후에 특정 브랜치로 전환하는 단계이다. - Test
해당 서버에서는docker-compose build
작업이 없었기 때문에docker-compose build
작업이 선행된다. (이때 docker hub에서 이미지를 가져오게 된다.)pytest
앞에sh ./scripts/wait-for-postgres.sh
가 있는 이유는 이전 포스트([Flask] Flask & docker-compose wait for db)에서 해결했던 service 실행 순서 문제 때문에 Test에서psycopg2.OperationError
가 발생할 수 있기 때문에 꼭 작성해줘야 한다. - Lint
flake8을 이용해서 code style 검사까지 진행한다.
yml 파일까지 작성하면 끝이다.
이제 git
add
, commit
, push
하고 Github Repository Actions 메뉴를 들어가면 작성했던 Job이 실행되는 것을 확인 할 수 있다.