CI
는 개발자를 위한 자동화 프로세스인 지속적인 통합을 의미하며 Code-Build-Test
단계가 있다. 지속적 통합으로 머지 전 빌드 오류나 테스트 오류를 확인하여 보안 이슈, 에러 등을 쉽게 파악할 수 있어 해당 이슈를 빠르게 개선할 수 있다.
CD
는 지속적인 서비스 제공 및/또는 지속적인 배포(Continuous Deployment)를 의미하며 이 두 용어는 상호 교환적으로 사용된다.
지속적인 배포의 경우 코드 변경 사항의 병합부터 프로덕션에 적합한 빌드 제공에 이르는 모든 단계로 테스트 자동화와 코드 릴리스 자동화가 포함된다.
CI/CD는 지속적 통합 및 지속적 제공의 구축 사례만을 지칭할 때도 있고 지속적 통합, 지속적 제공, 지속적 배포라는 3가지 구축 사례 모두를 의미할 때도 있다. 좀 더 복잡하게 설명하면 지속적인 서비스 제공은 때로 지속적인 배포의 과정까지 포함하는 방식으로 사용되기도 한다.
결과적으로 CI/CD는 파이프라인으로 표현되는 실제 프로세스를 의미하고 애플리케이션 개발에 지속적인 자동화 및 지속적인 모니터링을 추가하는 것을 의미한다. 이 용어는 사례별로 CI/CD 파이프라인에 구현된 자동화 수준 정도에 따라 그 의미가 달라진다.
배포 자동화란 한번의 클릭 혹은 명령어 입력을 통해 전체 배포 과정을 자동으로 진행하는 것을 뜻한다.
배포 자동화의 필요성
- 수동적이고 반복적인 배포 과정을 자동화함으로써 시간이 절약됨
- 휴먼 에러(수동 배포 과정 중 생기는 에러)를 방지할 수 있음
배포에서 파이프라인이란 소스 코드의 관리부터 실제 서비스로의 배포 과정을 연결하는 구조를 뜻한다. 파이프라인은 전체 배포 과정을 여러 단계로 분리한다. 각 단계는 파이프라인 안에서 순차적으로 실행되며 각 단계마다 주어진 작업들을 수행한다.
파이프라인에서 대표적으로 쓰이는 단계
- Source: Source 단계에서는 원격 저장소에 관리되고 있는 소스 코드에 변경 사항이 일어날 경우 이를 감지하고 다음 단계로 전달하는 작업을 수행한다.
- Build: Build 단계에서는 Source 단계에서 전달받은 코드를 컴파일, 빌드, 테스트하여 가공한다. 또한 Build 단계를 거쳐 생성된 결과물을 다음 단계로 전달하는 작업을 수행한다.
- Deploy: Deploy 단계에서는 Build 단계로부터 전달받은 결과물을 실제 서비스에 반영하는 작업을 수행한다.
GitHub Actions는 Github가 공식적으로 제공하는 빌드, 테스트 및 배포 파이프라인을 자동화할 수 있는 CI/CD 플랫폼이다.
레포지토리에서 Pull Request나 push같은 이벤트를 트리거로 GitHub 작업 워크플로를 구성할 수 있다. 워크플로는 하나 이상의 작업이 실행되는 자동화 프로세스로 각 작업은 자체 가상 머신 또는 컨테이너 내부에서 실행된다.
워크플로는 .yml (혹은 .yaml ) 파일에 의해 구성되며 테스트, 배포 등 기능에 따라 여러개의 워크플로도 만들 수 있다. 생성된 워크플로는 .github/workflows 디렉토리 이하에 위치한다.