hangman_web이라는 repo의 main에 코드가 머지될 때마다 다음을 수행
→ Github Actions로 구현한다.
python3 -m flask run --host=0.0.0.0 --port=4000
Flask==2.3.2
Flask-HTTPAuth==4.5.0
Flask-Login==0.6.2
Flask-SQLAlchemy==3.0.3
from flask import Flask,session
app= Flask(__name__)
...
app.secret_key = "Python Study"
if __name__=="__main__":
app.run()
docker run -p 4000:4000 image_name
→ 포트 4000에 대한 액세스를 수행FROM python:3.8-slim-buster
LABEL Maintainer="my_name"
WORKDIR /app
COPY app.py ./
COPY requirements.txt ./
RUN pip3 install -r requirements.txt
EXPOSE 4000
CMD ["python3", "-m","flask","run","--host=0.0.0.0","--port=4000"]
# 전체 코드
FROM python:3.8-slim-buster
LABEL Maintainer="areacmzl@gmail.com"
WORKDIR /app
COPY app.py ./
COPY requirements.txt ./
RUN pip3 install -r requirements.txt
EXPOSE 4000
CMD ["python3", "-m","flask","run","--host=0.0.0.0","--port=4000"]
docker build --platform=linux/amd64 -t poriz/hangman .
(.유의!)docker push poriz/hangman
사용할 CI Template: Python Application
- 추가로 flake8을 사용하여 코딩 스타일 체크도 진행
기본구성(unittest 사용)
python-app.yml
jobs:
build:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- name: Set up Python 3.10
uses: actions/setup-python@v3
with:
python-version: "3.10"
- name: Install dependencies
run: |
python -m pip install --upgrade pip
pip install flake8
if [ -f requirements.txt ]; then pip install -r requirements.txt; fi
- name: Lint with flake8 # pytest 삭제
run: |
# stop the build if there are Python syntax errors or undefined names
flake8 . --count --select=E9,F63,F7,F82 --show-source --statistics
# exit-zero treats all errors as warnings. The GitHub editor is 127 chars wide
flake8 . --count --exit-zero --max-complexity=10 --max-line-length=127 --statistics
- name: Test with unittest # unittest로 교체
# test로 시작하는 모든 파이썬 파일에 대해서 수행하기 위해 추가
run: |
python -m unittest discover -p 'test*.py'
Github Actions를 통해 main 브랜치에 push나 PR이 있는 경우 Docker Image를 만들고 Docker Hub으로 푸시
Docker image 템플릿 사용
Docker 관련 스텝
- name: docker login
env:
DOCKER_USER: ${{secrets.DOCKER_USER}}
DOCKER_PASSWORD: ${{secrets.DOCKER_PASSWORD}}
run: |
docker login -u #DOCKER_USER -p $DOCKER_PASSWORD
- name: Build the Docker image
run: docker build --tag ${{secrets.DOCKER_USER}}/hangman:latest .
- name: docker push
run: docker push $DOCKER_USER/hangman:latest
Docker Hub 정보 설정 Actions secrets and variables > Actions
- DOCKER_USER와 DOCKER_PASSWORD 저장
- yml에서는 다음과 같이 접근 ${{secrets.DOCKER_USER}}
결과
: JSON과 동일하며 변환도 가능하다.
- name: John Doe
- age: 30
hobbies:
- reading
- hiking
contact:
email: john.doe@example.com
phone:
home: 555-1234
work: 555-5678
YAML ↔ JSON : https://www.json2yaml.com/