CI/CD

yoon__0_0·2024년 8월 15일
0

이어드림 수업

목록 보기
103/103

지속적 통합 및 배포 (CI/CD): 지속적 통합 및 배포 파이프라인 구축

Project Settings

1) Github Repository 생성 후 Clone
2) Docker hub 회원가입
3) Docker AccessToken 생성

  • My Account > Security > New Access Token -> Create access token
    4) Git actions 등록(2개 등록)
  • gir repo -> settings -> secrets and variables -> Actions -> secrets -> New repository secret
  • DOCKERHUB_USER : docker user 이름
  • DOCKERHUB_TOKEN : 아까 토큰
    5) requirements.txt 파일생성
  • requirements.txt
django>=5.0.1,<6.0.0 # 5.0.1 이상 6.0.0 미만
djangorestframework>=3.14.0,<4.0.0
  • requirements.dev.txt : 개발시에만 실행하도록 하는 것
flake8>=7.0.0,<8.0.0 # PEP8 스타일 유지하도록

6) Docker file 생성

  • app 폴더 생성 : 장고 관리 목적
# alpine 3.19 버전의 리눅스를 구축하는데, 파이썬 버전은 3.11로 설치된 이미지를 불러오자
# alpine - 경량화된 리눅스 버전 => 가벼움 => 빌드 속도가 짧음 
# ex) miniconda
FROM python:3.11-alpine3.19

# image 유지 관리자 
LABEL maintainer="yoonjaeo"

# python 0:1 = False: True
# 컨테이너에 찍히는 로그를 볼수 있도록 허용
# 도커 컨테이너에서 어떤 일이 벌어지고 있는지 알수 있어서 컨테이너 관리가 편해짐 
# 이는 Docker 컨테이너에서 로그를 더 쉽게 볼 수 있게 합니다.
ENV PYTHONUNBUFFERED 1

# 최대한 컨테이너를 경량으로 유지하기 위해서 삭제할 수 있도록 tmp에 넣어서 build 후 삭제할 수 있도록
COPY ./requirements.txt /tmp/requirements.txt
COPY ./requirements.dev.txt /tmp/requirements.dev.txt
COPY ./app /app

WORKDIR /app

# 장고가 8000 포트이기 때문에 이를 열어줌 
EXPOSE 8000 

ARG DEV=false

# && \ : Enter
RUN python -m venv /py && \ 
    /py/bin/pip install --upgrade pip && \
    /py/bin/pip install -r /tmp/requirements.txt && \
    if [ $DEV = "true" ]; \
        then /py/bin/pip install -r /tmp/requirements.dev.txt ; \
    fi && \
    rm -rf /tmp && \
    adduser \
        --disabled-password \
        --no-create-home \
        django-user

ENV PATH="/py/bin:$PATH"

USER django-user


7) ignore 파일 생성

  • docker ignore
# Git
.git
.gitignore

# Docker
.docker

# Python
app/__pycache__/
app/*/__pycache__/
app/*/*/__pycache__/
app/*/*/*/__pycache__/
.env/
.venv/
venv/
# Django #
*.log
*.pot
*.pyc
__pycache__
db.sqlite3
media

# Backup files # 
*.bak 

# If you are using PyCharm # 
# User-specific stuff
.idea/**/workspace.xml
.idea/**/tasks.xml
.idea/**/usage.statistics.xml
.idea/**/dictionaries
.idea/**/shelf

# AWS User-specific
.idea/**/aws.xml

# Generated files
.idea/**/contentModel.xml

# Sensitive or high-churn files
.idea/**/dataSources/
.idea/**/dataSources.ids
.idea/**/dataSources.local.xml
.idea/**/sqlDataSources.xml
.idea/**/dynamic.xml
.idea/**/uiDesigner.xml
.idea/**/dbnavigator.xml

# Gradle
.idea/**/gradle.xml
.idea/**/libraries

# File-based project format
*.iws

# IntelliJ
out/

# JIRA plugin
atlassian-ide-plugin.xml

# Python # 
*.py[cod] 
*$py.class 

# Distribution / packaging 
.Python build/ 
develop-eggs/ 
dist/ 
downloads/ 
eggs/ 
.eggs/ 
lib/ 
lib64/ 
parts/ 
sdist/ 
var/ 
wheels/ 
*.whl
*.egg-info/ 
.installed.cfg 
*.egg 
*.manifest 
*.spec 

# Installer logs 
pip-log.txt 
pip-delete-this-directory.txt 

# Unit test / coverage reports 
htmlcov/ 
.tox/ 
.coverage 
.coverage.* 
.cache 
.pytest_cache/ 
nosetests.xml 
coverage.xml 
*.cover 
.hypothesis/ 

# Jupyter Notebook 
.ipynb_checkpoints 

# pyenv 
.python-version 

# celery 
celerybeat-schedule.* 

# SageMath parsed files 
*.sage.py 

# Environments 
.env 
.venv 
env/ 
venv/ 
ENV/ 
env.bak/ 
venv.bak/ 

# mkdocs documentation 
/site 

# mypy 
.mypy_cache/ 

# Sublime Text # 
*.tmlanguage.cache 
*.tmPreferences.cache 
*.stTheme.cache 
*.sublime-workspace 
*.sublime-project 

# sftp configuration file 
sftp-config.json 

# Package control specific files Package 
Control.last-run 
Control.ca-list 
Control.ca-bundle 
Control.system-ca-bundle 
GitHub.sublime-settings 

# Visual Studio Code # 
.vscode/* 
!.vscode/settings.json 
!.vscode/tasks.json 
!.vscode/launch.json 
!.vscode/extensions.json 
.history

8) docker image 생성

docker build .

9) docker compose 파일 생성 및 빌드

version: "3.11" # docker compose API version 3.11
services:
  app:
    build:
      context: . # root 경로에 만들것 이므로
      args:
        - DEV=true
    ports:
      - "8000:8000"
    volumes:
      - ./app:/app
    command: sh -c "python manage.py runserver 0.0.0.0:8000"
docker compose build

10) django 설치

  • django-admin 명령어를 통한 장고 프로젝트 폴더 생성
 docker-compose run --rm app sh -c "django-admin startproject app ."

  • django 가 잘 실행되는지 확인
docker-compose up
  • 127.0.0.1:8000 로 들어가면 아래와 같은 화면이 잘 뜨는걸 볼 수 있음

10 -2) 관리자 생성

  • DB 생성 : db.sqlite3 이 생성됨
docker-compose run --rm app sh -c "python manage.py migrate"
  • admin 계정 추가 : 터미널창에 입력
docker-compose run --rm app sh -c "python manage.py createsuperuser"

11) flake8

  • flak8 설정 : exclude: 아래의 파일들은 제외
# app/.flake8
# flake8 : 파이썬 코드 스타일 강제 & 디버깅 도움 
[flake8]
exclude = 
    migrations,
    __pycache__,
    manage.py,
    settings.py
  • 실행 명령어
docker-compose run --rm app sh -c "flake8"

12) github actions 설정

  • /.github/workflows/checks.yml
  • github actions => 설치할 필요가 없음.
  • CI/CD 설정
# Github Actions CI/CD

name: Checks # Workflow 이름

on: [push] # git push 이벤트 활성화 -> 레포지토리에 push를 했을 때 활성화

jobs:
  test-lint:
    name: Test and Lint
    runs-on: ubuntu-20.04 # 작업 환경
    steps: # 작업 단계
      # 도커 연결 작업
      - name: Login in to Docker Hub
        uses: docker/login-action@v1 # 다른 Docker 레지스트리에 로그인하기 위해 사용하는 GitHub Action
        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 "python manage.py test"
      - name: Lint # pep8 파이썬 코드 스타일 가이드 준수 여부 검사
        run: docker compose run --rm app sh -c "flake8"

13) git에 올리기

git add .
git commit -m "message"
git push -u origin main

14) action이 달라진것을 볼수 있음

  • trigger가 push 이기 때문에 push 할때마다 action 이 생성됨
profile
신윤재입니다

0개의 댓글