CI/CD란?
CI란?
지속적인 통합으로, 어플리케이션의 새로운 코드 변경 사항이 정기적으로 빌드 및 테스트 되어 공유 레포지토리에 통합되는 것을 의미한다.
CI가 필요한 환경
- 다수의 개발자가 형상관리 툴(Git, SVN 등)을 공유하여 사용하는 환경
- MSA(Micro Service Archietecture) 환경
CI의 핵심 목표
- 버그를 신속하게 찾아 해결
- 소프트웨어 품질 개선
- 새로운 업데이트의 검증 및 릴리즈 시간을 단축
CD(Continuous Delivery & Continuous Deployment)란?
공유 레포지토리로 자동으로 Release하고(Continuous Delivery), Production 레벨까지 자동으로 deploy하는 것(Continuous Deployment)을 의미한다. 즉, 개발자의 변경 사항이 레포지토리를 넘어, 고객의 프로덕션(Production) 환경까지 릴리즈 되는 것을 의미한다.
Github Actions이란?
Github에서 저장소를 기반으로 소프트웨어 개발 워크플로우를 자동화 할 수 있는 도구이다.
Github 내부에서 프로젝트를 빌드, 테스트, 릴리즈 또는 배포를 지원하는 기능으로서, Github에서 제공하는 CI/CD 도구라고 생각하면 된다.
가격정보
Public Repository에 한해서 무료이며, Private Repository에 대한 가격정보는 아래 공식 홈페이지에서 확인할 수 있다.
Github Action의 4가지 주요 개념
1. Workflow
- Workflow는 프로젝트를 빌드, 테스트, 패키지, 릴리즈 또는 배포하기 위한 전체적인 프로세스이다.
- 최상위 개념으로 여러개의 Job으로 구성되며, Event를 기반으로 동작한다.
- Workflow 파일을 만들어 전달하면 Github Action이 실행된다.
- Workflow 파일은 YAML으로 작성되고, Github Repository의 .github/workflows 폴더 아래에 저장된다.
2. Event
- Workflow를 트리거하는 특정 활동이나 규칙
- 특정 브랜치로 Push, Pull Request, 특정 시간대에 반복 활동, 외부 이벤트 실행 등
3. Job
- Job은 여러 Step으로 구성되고, 가상 환경의 인스턴스에서 실행된다.
- 다른 Job에 의존 관계를 가질 수 있고, 독립적으로 병렬 실행도 가능하다.
4. Step
- Step은 순차적으로 명령어를 수행한다.
- Task들의 집합으로, Command나 Action을 수행할 수 있다.
5. Action
- Workflow의 가장 작은 블럭으로, Job을 만들기 위해 Step들을 연결할 수 있다.
- 재사용이 가능한 컴포넌트로, 개인적으로 만든 Action을 사용할 수도 있지만 Marketplace에 있는 공용 Action을 사용할 수 있다.
Workflow 생성하기
다음은 Node.js 사용 시, 예제로 제공하는 workflow yml 파일이다.
name: Node CI
on: [push]
jobs: ## job 들을 명시
build: ## job id
runs-on: ubuntu-latest ## 해당 job의 구동 환경을 정의
strategy:
matrix:
node-version: [8.x, 10.x, 12.x]
steps:
- uses: actions/checkout@v1
- name: Use Node.js ${{ matrix.node-version }}
uses: actions/setup-node@v1
with:
node-version: ${{ matrix.node-version }}
- name: Npm Install, build and test
run: |
npm ci
npm run build --if-present
npm test
env:
CI: true
- name : workflow의 이름
- on : workflow의 Event를 명시
- cron 문법
- push | pull-request와 같은 github 이벤트를 구독
- 실행할 브랜치 제한
- paths로 특정 패턴을 설정해 해당 패턴에 일치하는 파일 변경 시 workflow 실행이 가능
- paths-ignore는 paths와 반대 기능
# 10분마다 실행 workflow
on:
schedule:
- cron: '*/10 * * * *'
# master, dev 브랜치에 push 된 경우에 실행
on:
push:
branches: [master, dev]
# master, dev 브랜치에 push 되었고,
# js파일의 변경이 있을 때에만 트리거,
# doc 디렉토리의 변경에는 트리거 하지 않게 하고싶은 경우
on:
push:
branches: [master, dev]
paths:
- "**.js"
paths-ignore:
- "doc/**"
- jobs : 등록된 job들은 기본적으로 병렬 실행
더 많은 workflow 구문은 아래에서 확인할 수 있다.
Reference
반응형
'FrontEnd' 카테고리의 다른 글
[SW디자인패턴] MVC, MVP, MVVM 비교 (0) | 2022.03.04 |
---|---|
[Github] Github Actions를 이용한 AWS S3 배포 자동화 (0) | 2022.02.23 |
GraphQL이란? (0) | 2022.01.28 |
[S3, CloudFront] React Access Denied(403) Error (0) | 2022.01.26 |
Virtual DOM vs Incremental DOM (0) | 2022.01.16 |
댓글