ci/cd
CI/CD는 애플리케이션 개발 단계를 자동화하여 애플리케이션을 보다 짧은 주기로 고객에게 제공하는 방법
파이프라인으로 표현되는 실제 프로세스를 의미하고, 애플리케이션 개발에 지속적인 자동화 및 지속적인 모니터링을 추가하는 것을 의미
CI
지속적인 통합(Continuous Integration) 의 약자로, 새로운 코드 변경 사항을 말 그대로 지속적으로 빌드 및 테스트하여 main 브랜치에 통합하는 과정
CD
지속적인 제공(Continuous Delivery) 또는 지속적인 배포(Continuous Deployment)의 약자
효과적인 CD 프로세스를 실현하기 위해서는 개발 파이프라인에 CI가 먼저 구축되어있어야 한다.
(Continuous Delivery)
개발자들이 애플리케이션에 적용한 변경 사항이 버그 테스트를 거쳐 리포지토리에 자동으로 업로드되는 것을 의미
프로덕션 환경으로 배포할 준비가 되어 있는 코드베이스를 확보하여 최소한의 노력으로 새로운 코드를 배포하는 것을 목표
코드 변경 사항 병합부터 프로덕션에 적합한 빌드 제공에 이르는 모든 단계에는 테스트 자동화와 코드 릴리스 자동화가 포함
이 프로세스를 완료하면 운영팀이 보다 빠르고 손쉽게 애플리케이션을 프로덕션으로 배포할 수 있게 함
(Continuous Deployment)
지속적 제공의 확장된 형태
개발자의 변경 사항을 리포지토리에서 고객이 사용 가능한 프로덕션 환경까지 자동으로 릴리스하는 것을 의미
애플리케이션 제공 속도를 저해하는 수동 프로세스로 인한 운영팀의 프로세스 과부하 문제를 해결 ( == 수동으로 진행하는 작업 속도 저하의 문제를 해결 )
개발자가 애플리케이션에 변경 사항을 작성한 후 몇 분 이내에 애플리케이션을 자동으로 실행할 수 있음(자동화된 테스트를 통과한 것으로 간주)
사용자 피드백을 지속적으로 수신하고 통합=하기 쉬워짐
차이점
프로덕션 배포까지 자동화하는지 여부.
지속적 전달은 프로덕션은 수동으로 배포하며, 지속적 배포는 프로덕션까지 자동으로 배포합니다.
일반적으로 배포를 하면, 서버가 잠시 중단되어서 서비스를 이용할 수 없지만, 무중단 배포는 배포를 하더라도 멈추지 않고 서비스를 이용할 수 있다.
GitHub Actions에서 가장 상위 개념
워크플로우(Workflow, 작업 흐름)는 쉽게 말해 자동화해놓은 작업 과정
워크플로우는 코드 저장소 내에서 .github/workflows 폴더 아래에 위치한 YAML 파일로 설정하며, 하나의 코드 저장소에는 여러 개의 워크플로우, 즉 여러 개의 YAML 파일을 생성할 수 있다.
name: sns-github-action
on:
push:
branches: [ main ]
main
branch
에 push
이벤트가 on
실행되었을 때 일어나는 일
on:
schedule:
- cron: "0 0 * * *"
주기적으로 실행하는 cron도 가능
작업은 워크플로우 YAML 파일 내에서 jobs 속성을 사용하며 작업 식별자(ID)와 작업 세부 내용 간의 맵핑(mapping) 형태로 명시
jobs:
job1: # 작업 아이디
# job1에 대한 세부 내용
job2:
# job2에 대한 세부 내용
job3:
# job3에 대한 세부 내용
runs-on
: 필수 속성으로, 실행 환경 지정
jobs:
job1:
runs-on: ubuntu-latest # or windows-latest or macos-latest
steps:
GitHub Actions에서는 각 작업(job)이 하나 이상의 단계(step)로 모델링
커맨드(command) / 스크립트(script) / 액션(action) 등 다양한 형태로 작성가능하다.
jobs:
test:
runs-on: ubuntu-latest
steps:
- name: test start
run: npm test
jobs:
test:
runs-on: ubuntu-latest
steps:
- run: npm install
- run: npm test
run
을 사용하고, 한 단계의 구분은 -
를 사용한다.GitHub Actions에서 빈번하게 필요한 반복 단계를 재사용하기 용이하도록 제공되는 일종의 작업 공유 메커니즘
하나의 코드 저장소 범위 내에서 여러 워크플로우 간에서 공유 가능
공개 코드 저장소를 통해 액션을 공유하면 GitHub 상의 모든 코드 저장소에서 사용이 가능
jobs:
test:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
uses
을 사용하고, 한 단계의 구분은 -
를 사용한다.