반응형
CI/CD pipeline 이란?
CI/CD 파이프라인은 소프트웨어 개발 프로세스의 일환으로, Continuous Integration (CI, 지속적 통합) 및 Continuous Deployment/Delivery (CD, 지속적 배포/배달)의 약자다. 이는 소프트웨어를 개발하고 배포하는 과정을 자동화하고 지속적으로 진행함으로써 소프트웨어의 품질을 향상시키고 개발 및 배포 과정을 더욱 효율적으로 만드는 방법이다.
- Continuous Integration (CI, 지속적 통합):
- CI는 개발자들이 코드를 공유 레포지토리에 푸시할 때마다 자동으로 소프트웨어를 빌드하고 테스트하는 과정을 말함
- 즉, new code가 기존에 존재하는 codebase에서 works 하는지 아닌지 알고자함
- 테스트가 fail 하면 개발자들이 fix 해서 main branch로 merge 전에 수정할 수 있음
- Continuous Deployment/Delivery (CD, 지속적 배포/배달):
- CD는 CI를 통과한 코드 변경 사항이 자동으로 프로덕션 환경으로 배포되는 과정을 말함
- Continuous Delivery에서는 코드 변경 사항을 프로덕션 환경으로 자동으로 배포하지만, 배포를 트리거하기 위해 수동으로 승인하는 단계가 포함될 수 있음
- Continuous Deployment에서는 코드 변경 사항이 자동으로 프로덕션 환경으로 배포됨.
오늘은, Github actions를 이용해서 CI를 구축하는 방법에 대해 알아보고자 한다.
Github actions 이란?
GitHub Actions은 GitHub에서 제공하는 자동화 및 워크플로우 도구로, 레포지토리에서 발생하는 이벤트(pushes, pull requests, issue creation, etc)에 대한 응답으로 다양한 작업을 실행할 수 있음 → CI/CD 작업을 자동화할 수 있다.
Workflow 파일 만들기
workflow는 Github actions을 구성하는 구성요소 중 하나인데, `.github/workflows` 디렉터리에 YAML 파일로 저장된다.
이제 이 YAML 파일에 어떤 내용을 써야 하는지 하나씩 보도록 해보자.
참고로 이 workflow파일은 나의 요구의 맞게 만들어진 것이지 이렇게 써야만 하는 것은 당연히 아니다.
자세한 설명은 각 코멘트에 달아놓았다.
# 작업의 이름을 정의함
name: CI
# 워크플로우가 실행되는 조건을 정의함. 여기서는 push 이벤트가 트리거로 설정되어있음
on:
push:
# 수행할 작업을 정의함
jobs:
build:
name: Build & Test
# 작업이 실행될 환경을 정의함
runs-on: ubuntu-latest
strategy:
matrix:
python-version: ["3.10"]
# 환경변수를 설정함
env:
PYTHONPATH: /my/path/to/project:/my/second/path
MODULE_ROOTS: "src tests 등등"
steps:
# 액션이 실행되면 현재 저장소의 코드를 클론하고 작업 디렉토리로 가져온다.
- name: Checkout code
uses: actions/checkout@v3
# 특정 Python 버전을 설치
- name: Set up Python ${{ matrix.python-version }}
uses: actions/setup-python@v3
with:
python-version: ${{ matrix.python-version }}
# pip 업그레이드 및 requirements 설치
- name: Install dependencies
run: |
python -m pip install --upgrade pip
python -m pip install -r requirements.txt
# autopep8 을 사용하여 코드 스타일 검사
# 나는 configure/.pep8rc 에 configure를 따로 함. 예를들어 max_line_length 를 100으로 설정함
# 위에서 지정한 $MODULE_ROOTS 에 대해 코드 스타일을 검사하게 됨
- name: Check code style with autopep8
run: |
python -m pycodestyle --config=configure/.pep8rc $MODULE_ROOTS
# pylint로 코드 분석. 가독성, 잠재적인 버그 등을 검사하여 개선할점을 제안해줌
# 위와 비슷하게, --rcfile=configure/.pylintrc를 통해서 pylint의 옵션을 따로 설정함.
# 그럴 필요가 없으면 이부분은 지우고 $(git ls-files '*.py')만 쓰면됨
- name: Analysing the code with pylint
run: |
pylint --rcfile=configure/.pylintrc $(git ls-files '*.py')
# 'test_'로 시작하는 파일들에 대해 unittest를 실행함
- name: Run Unittests
run: |
python -m unittest discover -s tests -p 'test_*.py'
배움을 기록하기 위한 공간입니다.
수정이 필요한 내용이나 공유하고 싶은 것이 있다면 언제든 댓글로 남겨주시면 환영입니다 :D
반응형
'배움 기록 > Programming' 카테고리의 다른 글
C++ 인터뷰 준비하기 - 2. OOP (3) | 2024.12.25 |
---|---|
C++ 인터뷰 준비하기 - 1. Basic Concepts (2) | 2024.12.25 |
[python] (unittest.main) is not callable 에러 해결 (feat. PYTHONPATH, 환경변수) (0) | 2024.02.27 |
[python, dataclass] 데이터 클래스의 장점 (0) | 2024.02.26 |
csv파일을 엑셀에서 세미콜론으로 분리해서 보기 (데이터 변형 없이!) (1) | 2024.01.11 |