CI/CD
CI (Continuous Integration, 지속적 통합)
- 개발자가 코드 변경 사항을 중앙의 저장소에 통합하는 것을 의미
- CI의 주요 목표는 버그를 조기에 발견하고 해결하여 소프트웨어 품질을 높이는 것
- CI 과정에서는 코드가 저장소에 푸시될 때마다 자동화된 빌드와 테스트가 실행되며, 이를 통해 코드의 문제나 오류를 신속하게 탐지할 수 있다.
CD (Continuous Delivery & Continuous Deployment, 지속적 배포 & 지속적 전달)
- Continuous Delivery : CI의 연장선으로, 소프트웨어를 언제든지 안정적으로 제품 환경에 배포할 수 있도록 유지하는 것을 목표로 한다.
- 중요한 점은 코드가 제품 환경에 자동으로 배포되는 것이 아니라, 배포 준비만 되어있으며 실제 배포는 수동으로 이루어질 수 있다.
- Continuous Deployment: 소프트웨어 변경사항을 자동으로 제품 환경에 바로 배포하는 것을 의미
- CI 과정을 통과한 코드는 자동화된 테스트와 함께 제품 환경에 자동으로 배포된다.
Docker 환경에서의 CI/CD
1) 버전 및 형상 관리를 위해 git 등에 변경 코드를 push
2) 사전에 구성된 CI/CD 파이프라인에서 자동으로 빌드를 트리거하여 Dockerfile을 사용한 docker image를 새로 생성
3) 새롭게 생성된 docker image를 사용하고 있는 docker registry에 push (CI)
4) 추가된 docker image를 가져와 테스트 환경에 배포
5) 애플리케이션 테스트가 마무리되면 docker image 운영 환경에 배포
GitHub Action
코드 저장소인 GitHub에 CI/CD 기능이 추가된 서비스를 GitHub Action이라고 한다.
이 코드 저장소에서 어떤 이벤트가 발생하면 특정 작업이 트리거 되도록 자동화 할 수 있다.
- 코드 저장소에 Pull Request를 생성하게 되면 GitHub Action을 통해 변경된 코드 검사
- main branch에 코드 유입시 GitHub Action을 통해 빌드 후 배포 구성
- 작업 스케줄러 (cron)
workflow
- 자동화된 전체 프로세스 과정을 의미하고, 하나 이상의 job으로 구성
- event에 의해 스케줄이나 트리거 되는 자동화 구성
- on 속성을 통해 해당 workflow가 언제 실행되는지 정의
- YAML로 작성되며 GitHoub Repository의 .github/workflows 폴더 아래에 저장
- 작성된 YAML이 전달되면 Github Actions는 해당 파일을 기반으로 실행
event
- workflow를 실행하는 활동 및 규칙 지정
- git 저장소에 commit을 하거나 pull request가 생성되면 GitHub 활동 시작
Job
- 여러 Step으로 구성되고, 단일 가상 환경에서 실행되는 하나의 처리 단위
- 필요에 따라 다른 Job에 의존 관계를 가질 수도 있고, 실행 순서 제어도 가능
step
- job 안에서 순차적으로 실행되는 프로세스 단위
- 즉, 하나의 job은 여러 단계(step)의 명령을 순차적으로 실행
- step은 명령이나 스크립트를 run 속성으로 작성하거나, uses 속성으로 action을 사용
action
- job을 구성하기 위한 step들의 조합으로 구성된 독립적인 명령. workflow의 가장 작은 빌드 단위이다.
- workflow에서 action을 사용하기 위해서는 action이 step을 포함해야 한다.
runner
- GitHub Action Runner 애플리케이션이 설치된 가상머신 환경으로,
workflow가 실행될 인스턴스
- GitHub에서 자체 제공하는 가상머신인 GitHub-hosted Runner와 사용자가 직접 환경을 구성하는 Self-hosted Runner가 있다.