CI/CD란?
CI/CD (Continuous Integration/Continuous Deployment): 소프트웨어 개발 과정에서의 효율성과 신속성을 극대화하는 자동화된 프레임워크 제공
- 지속적 통합, 지속적 전달, 지속적 배포: continuous integration, continuous delivery, continuous deployment
CI: Continuous Integration
- 개발자들이 작업한 코드를 주기적으로 공유 레포에 병합 => 코드 통합 자동화
- 모든 변경사항은 자동 빌드 및 테스트를 거쳐 메인 브렌치에 통합
- 코드 충돌 최소화 & 소프트웨어 품질 유지 & 배포 준비 상태 유지
CD: Continuous Delivery
- CI 과정에서 한 단계 더 나아가는 것
- 코드 변경사항이자동으로 빌드 및 테스트를 거쳐 실제 운영 환경에 배포될 준비 완료
- 배포 과정을 완전히 자동화는 하지 않음. 단, 실제 배포는 수동으로 트리거할 수 있는 옵션
- 개발팀은 언제든지 안정적인 버전의 소프트웨어를 신속하게 배포할 준비가 되어있음
CD: Continuous Deployment
- 모든 코드 변경사항이 자동 테스트를 통과하면 즉시 프로덕션 환경에 배포된다
- 개발팀이 소프트웨어를 빠르게 혁신하고, 사용자에게 지속적으로 가치를 전달할 수 있도록
- 지속적 배포를 통해 소프트웨어의 릴리스 과정 자동화 => 인간의 개입 없이도 신속하게 배포
- CI/CD 파이프라인 도입은 개발 프로세스의 자동화와 코드 통합, 테스트, 배포 과정의 효율성을 극대화
- 코드 품질 개선, 개발 주기 단축, 사용자 만족도 증대
CI/CD 파이프라인 도구
여러 CI/CD 파이프라인 도구들은 각각 고유의 특성과 장단점을 가진다
-
Jenkins
- 장점: 매우 유연. 수많은 플러그인으로 확장 가능
- 단점: 초기 설정 복잡
-
Github Actions
- 장점: Github과의 긴밀한 통합
- 단점: 다른 도구들에 비해 상대적으로 새로움
-
GitLab CI/CD
- 장점: 소스 코드 관리와 CI/CD가 하나의 플랫폼에 통합
- 단점: 대규모 프로젝트에서는 자원 관리가 필요할 수도
-
CircleCI
- 장점: 빠른 실행 속도와 좋은 확장성
- 단점: 무료 플랜의 제한적인 리소스
Github Action
Github Action의 동작 원리
Github Actions는 Github 레포의 이벤트 (푸쉬, 풀 리퀘스트 등)에 반응하여 자동화된 워크플로우를 실행한다
Workflow (작업)은 Github Actions에서 실행되는 자동화 프로세스를 정의하는 단위다
- 각 작업은 독립적으로 실행되며, 여러 개의 단계로 구성 가능
Action: Github Marketplace에서 가져온, 또는 직접 작성한 재사용 가능한 코드 조각
- 다양한 용도로 사용 가능
- CI/CD, 테스트, 배포 등과 같은 다양한 작업 자동화
Secrets: 레포의 중요한 데이터를 안전하게 저장하고 관리
- API 토큰, 암호, SSH 키 등
- 암호화되어 저장. 워크플로우 실행 중에 필요할 때만 복호화
- 워크플로우는
.github/workflows
디렉토리 내 YAML 파일로 정의
- 작업 (jobs), 단계 (steps), 액션 (actions) 등 설정 가능
- 워크플로우는 이벤트 발생 시 지정된 환경 (Ubuntu, Windows 등)에서 컨테이너 또는 가상 머신 위에서 실행
- 작업은 서로 독립적으로 또는 병렬로 실행 가능
- 각 단계는 소프트웨어 빌드, 테스트, 배포 등의 작업 수행이 가능
출처:
원티드 2024 4월 백엔드 자료