CICD란?
처음 간단한 코드를 배포하거나 수정하는 것은 그리 어려운 일은 아니다. 그러나 작성한 코드가 많아지면 여러 문제가 발생하게 된다.
1. 오류가 어디서, 언제 난 것인지를 확인하기 어렵다.
2. 배포를 했을 경우, 코드를 수정할 경우 다시 배포해야 한다.
배포라는 과정이 그리 쉬운 과정도 아니고, 오류를 잡는 것 또한 매우 짜증나는 일이기에 이런 것을 한번에 처리해줄 수 있는 자동화 기법이 필요하다.
그래서 등장한 개념이 CICD이다!
CI : 지속적 통합으로, 코드를 통합할 때에 오류가 있는지 자동적으로 확인할 수 있는 것을 의미한다.
CD : 지속적 배포로, 코드를 배포할 때 거쳐야 하는 여러 과정을 한꺼번에 처리해주는 것을 의미한다.
git에서는 사실 CI는 pr을 보낼때마다 자동으로 진행해주는 듯 하지만, 배포는 EC2에 git clone해서 가져오고, 환경 변수 가져오고, 의존성 가져오고...너무 귀찮다. 그래서 이것을 한꺼번에 해주는 하나의 해결책으로 Github actions가 존재한다.
Github Actions란 무엇일까?
2018년 이전에는 젠킨스와 같은 외부 툴을 활용하여 github를 연결하여 배포를 진행했다. 그러나 그 이후에는 github 자체에서 배포할 수 있는 기술인 github actions를 제공해주었다.
Github actions의 구성 요소
1. Event
Event란 어떤 일이 일어날때 github actions의 코드가 작동되도록 하고 싶냐는 의미이다. 실제로 누군가가 특정 branch로 푸쉬할 때, 이슈를 닫을 때 등을 Event로 설정해줄 수 있다.
- main branch에 푸쉬를 진행할 때를 설정
on:
push:
branches: [main]
2. workflows
Event에서 설정했던 상황이 일어나게 되면, workflow에 해당하는 코드가 진행된다. Workflow에는 jobs들로 이루어져 있다.
- jobs
1) 순차적으로 진행할 수도 있다. (step)
2) Job 끼리는 병렬적으로 진행되게 할 수도 있다.
jobs:
job1:
runs-on : ubuntu-latest
// 순차적인 처리
steps:
- uses: actions/checkout@v3
- run: npm install
- run: npm test
// 병렬 처리
job2:
runs-on : linux..
- actions : 이미 정의되어 있는 github actions의 명령어들을 의미한다.
// 지금 repo에 있는 거를 actions의 작업 공간에 가져와라!
- uses: actions/checkout@v3
3. Runners :해당 과정이 실행되고 있는 일종의 VM 개념이다.
어떻게 짜는 걸까?
- workflow.yml 파일을 작성한다.(위치는 레포지토리의 .gitbub/workflows/workflow.yml)
- 더불어서 actions 탭에 가게 되면 내가 활용하는 서버 환경에 따라서 형성할 수 있도록 도와준다.
- github actions에서 제공하고 있는 Django 의 기본 템플릿과 나의 설명 주석
name: Django CI
// Event 설정
on:
push:
branches: [ "main" ]
pull_request:
branches: [ "main" ]
// Event가 일어나면 나는 이런 일을 할거야
jobs:
// 일단 이렇게 build 를 할건데,
build:
// 우분트 환경에서 진행되고
runs-on: ubuntu-latest
strategy:
max-parallel: 4
matrix:
python-version: [3.7, 3.8, 3.9]
// 이런 일들을 순차적으로 진행할 거야
steps:
// 일단 repo에 있는 거를 가져와
- uses: actions/checkout@v3
- name: Set up Python ${{ matrix.python-version }}
uses: actions/setup-python@v3
with:
python-version: ${{ matrix.python-version }}
// 내가 Dependencies를 모아놓았는 requirements.txt를 다시 가상 환경에 깔고
- name: Install Dependencies
run: |
python -m pip install --upgrade pip
pip install -r requirements.txt
// Test를 해보겠다 이거야
- name: Run Tests
run: |
python manage.py test
이런식으로 작성을 하면 된다. 실제로 배포는 어떻게 하는지 알아보자.
'git > github actions' 카테고리의 다른 글
github actions를 활용한 CICD. 이번에는 spring boot로! (2) (0) | 2023.09.03 |
---|---|
github actions를 활용한 CICD. 이번에는 spring boot로! (1) (0) | 2023.08.20 |
github action을 통한 CI/CD 배포 자동화 (feat.fastAPI) (0) | 2023.07.18 |