간략하게 CI/CD의 개념에 대해서 설명하자면 CI/CD는 소프트웨어 개발 과정에서 품질과 생산성을 향상하기 위한 자동화된 프로세스입니다.
CI(Continuous Integration)는 코드의 빌드, 테스트, 리뷰, 머지 등의 과정을 자동화하여 개발자들이 코드 변경에 대한 피드백을 신속하게 받을 수 있도록 합니다.
CD(Continuous Delivery/Deployment)는 소프트웨어를 빠르고 안정적으로 배포하기 위한 자동화된 프로세스입니다. Continuous Delivery는 수동으로 배포할 수 있도록 배포 자동화까지 수행하고, Continuous Deployment는 배포까지 자동화하여 배포 가능한 상태의 소프트웨어를 지속적으로 제공합니다.
CI/CD를 사용하면 소프트웨어 개발 및 배포에 대한 자동화와 지속적인 개선이 가능해지며, 빠른 속도와 높은 품질을 유지할 수 있습니다.
github에는 git action이라는 것을 이용하여 특정한 이벤트를 트리거로 삼아서 원하는 기능을 수행할 수 있게 해주는 기능이 있습니다. 여기서는 pre-commit 패키지를 이용해서 commit 전에 isort black flake8을 수행했던 것처럼 git action을 이용해서 main branch에 pull request가 들어왔을 때 isort black flake8를 자동으로 수행하고 그 결과를 나타낼 수 있도록 해보도록 하겠습니다.
밑의 사진의 폴더 구조를 확인하길 바랍니다.. github - workflows 밑의. yml 파일을 이용하여 git action을 수행하게 할 수 있습니다.
- 실행 예시
위 내용은 push와 main에 pull request를 보내는 것을 트리거로 삼아서 gitaction을 이용해서 작성된 행동을 하게 만들어놓은 내용이었습니다. 밑에 코드 공유와 설명을 하도록 하겠습니다.
name: Lint
on:
push:
pull_request:
branches: [ "main" ]
jobs:
build:
runs-on: ubuntu-latest
strategy:
matrix:
python-version: [3.9]
steps:
- uses: actions/checkout@v3
- name: Set up Python ${{ matrix.python-version }}
uses: actions/setup-python@v3
with:
python-version: ${{ matrix.python-version }}
- name: Install pipenv
run: |
python -m pip install --upgrade pipenv wheel
- id: cache-pipenv
uses: actions/cache@v2
with:
path: ~/.local/share/virtualenvs/
key: ${{ runner.os }}-pipenv-${{ hashFiles('**/Pipfile.lock') }}
- name: Install dependencies
if: steps.cache-pipenv.outputs.cache-hit != 'true'
run: |
pipenv install
- name: Lint check
run: |
pipenv run isort --check-only .
pipenv run black --check .
pipenv run flake8
사실적으로 코드의 흐름은 code 내용중 `-name`을 확인하면 짐작이 가능합니다. 하지만 중요한 포인트는 on: 에서 어떤 조건을 통하여 코드를 실행하게 만드는지가 되겠습니다. 이것을 이용해서 향후에는 tag가 변경되었을 때 또는 태그 숫자의 가장 앞자리가 변경되었을 때 등의 조건으로 변경이 가능하고 이렇게 되었을 때는 gitaction을 이용해서 aws와 연결 자동으로 코드를 배포하는 로직까지 구현할 수 있습니다.
해당 내용을 직접 클론해서 테스트해보고 싶으시다면 밑의 저장소를 이용해 보시기 바랍니다.
https://github.com/nmdkims/boilerplate
이것으로 프로젝트 설정에 대한 내용을 마치도록 하겠습니다.
'DevLog' 카테고리의 다른 글
[개발환경셋팅] 안드로이드 앱 출시 준비 (0) | 2023.09.17 |
---|---|
[개발환경셋팅] 2. commit message template, pull request template 설정 (0) | 2023.05.08 |
[개발환경셋팅] 1. Django 프로젝트 Boilerplate 만들기 (1) | 2023.05.08 |
[개념완성] Django INSTALLED_APPS 앱등록 (0) | 2023.05.01 |
[개념완성] get_object_or_404 (0) | 2023.04.21 |