CI/CD는 지속적인 통합(Continuous Integration)과 배포(Continuous Delivery/Deployment)를 일컫는 말이다. CI/CD는 DevOps의 핵심 개념 중 하나이다. 어떤 구성이 있는지 살펴보자. 여기서는 github actions를 기준으로 설명한다.
CI
- 자동화 프로세스인 지속적인 통합을 의미한다.
- CI를 성공적으로 구현할 경우 애플리케이션 코드의 새로운 변경 사항이 정기적으로 빌드 및 테스트를 거쳐 공유 레포지토리에 병합된다.
- 여러 명의 개발자의 코드가 충돌나는 경우를 이 과정에서 해결할 수 있다.
CD
- 지속적인 서비스 제공 또는 배포라고 볼 수 있다.
- 버그 테스트를 거쳐 repo에 자동으로 업로드되는 것을 뜻하며, 운영팀은 이 repo에서 애플리케이션을 실시간 프로덕션 환경으로 배포할 수 있다.
Github Action
github action은 이러한 CI/CD를 가능하게 해주는 툴 중 하나다. 이러한 툴은 Jenkins, AWS Code Deploy, Code Build 등 다양하게 있다. Github Action을 사용하기 위해선 Github repo에 Acition 탭을 누르면 가능하다.
구성요소
workflow
- Workflow는 프로젝트를 빌드, 테스트, 패키지, 릴리스 또는 배포하기 위한 전체적인 프로세스를 명시한 Yaml 파일이다.
- 한 개 이상의 job으로 구성되어 있고 Event 기반으로 동작한다.
- workflow > job > step >action 순으로 명시를 해서 파일을 작성해야 한다.
Event
- Workflow를 실행하는 특정 활동이나 규칙이다.
- github에 소스코드를 푸시하면 발생하는 push, pull request, issue 등을 event로 정의할 수 있다.
Job
- Job은 여러 Step으로 구성되어 있고, 가상 환경의 인스턴스에서 실행한다.
- 각각의 step들은 일종의 shell script처럼 실행된다.
- step들은 순서에 따라 실행되며, step끼리 데이터들을 공유할 수 있다.
- 다른 Job과 의존성을 가질 수 있고, 독립적으로 병렬 실행도 가능하다.
Actions
- 복잡하고 자주 반복되는 작업을 정의한 커스텀 어플리케이션
- workflow 파일 안에서 자주 반복되는 코드를 미리 정의할 수 있다.
- github market에서 공용 Action 또는 다른 사람의 action을 사용할 수 있다.
Runner
- Github Action Runner는 애플리케이션이 설치된 머신으로, Workflow가 실행될 인스턴스이다.
- Github에서 호스팅 해주는 Github-hosted runner와 직접 호스팅 하는 Self-hosted runner로 나뉜다
살펴보기
name: learn-github-actions
on: [push]
jobs:
check-bats-version:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v2
- uses: actions/setup-node@v2
with:
node-version: '14'
- run: npm install -g bats
- run: bats -v
name
- workflow의 name을 정의
- 선택사항이며 깃허브 저장소의 깃허브 액션 탭에서 workflow의 이름을 보여준다.
on
- 해당 workflow를 실행시키는 이벤트를 정의한다.
- push 이벤트가 발생했을 때 workflow가 실행되도록 정의한다.
jobs
- check-bats-version - job의 이름을 정의
- runs-on : 어떤 호스트에서 실행될지 정의 - ubuntu 가상 머신에서 실행되도록 정의
Steps
- uses: actions/checkout@v2 - 해당 레포지토리를 pull 받고 이동하는 action 대부분의 workflow에서 사용
- uses: actions/setup-node@v2 - 노드를 설치하는 action으로 가상머신 안에는 대부분의 프로그래밍 언어가 설치되어 있지 않기 때문에 프로젝트 실행에 필요한 언어들을 action을 통해 다운
- run: npm install -g bats - run 키워드를 통해 러너가 실행되는 서버에서 명령어를 실행
다음 포스팅에서 실제로 구축해 보자.
참고
https://insight-bgh.tistory.com/473
'DevOps' 카테고리의 다른 글
따라하며 배우는 도커와 CI 환경 - 3. 직접 도커 이미지 생성하기 (0) | 2023.03.05 |
---|---|
따라하며 배우는 도커와 CI 환경 - 1. 도커란 (0) | 2023.03.03 |
배포전략 - 카나리 배포전략 (0) | 2023.02.18 |
SSH 터널링(포트 포워딩) (1) | 2023.02.04 |
SSH 계정 및 DB 서버 계정 생성 및 DB 외부 접속 허용하기 (0) | 2023.01.19 |