Today I Learned
CI/CD란?

1. CI(Continuous integration)
- 자동화된 빌드 및 테스트가 수행된 후, 개발자가 코드 변경 사항을 중앙 리포지토리에 정기적으로 병합하는 DevOps 소프트웨어 개발 방식
- 소스/버전 관리 시스템에 대한 변경 사항을 정기적으로 커밋하여 모든 사람에게 동일 작업 기반을 제공하기 위함
- 지속적 통합은 그 자체로 유익하지만 CI/CD 파이프라인을 구현하기 위한 첫 번째 단계
2. CD (Continuous Deployment, Continuous Delivery)
지속적 배포
- 개발자의 변경 사항을 리포지토리에서 고객이 사용 가능한 프로덕션 환경까지 자동으로 릴리스하는 것
- 개발자를 위한 자동화 프로세스
- 수동 개입 없이 해당 변경 사항이 프로덕션에 자동으로 배포
- 간단한 코드 변경이 정기적으로 마스터에 커밋되고, 자동화된 빌드 및 테스트 프로세스를 거치며 다양한 사전 프로덕션 환경으로 승격되며, 문제가 발견되지 않으면 최종적으로 배포
CI/CD 도구
1. GitHub Actions
- GitHub Actions는 GitHub 저장소에 내장된 자동화 도구
- 이슈 응답, 풀 리퀘스트 처리, 라벨 관리 등 다양한 GitHub 이벤트에 반응하여 자동화된 작업을 실행
- .github/workflows 디렉토리에 YAML 파일 형식으로 워크플로우를 정의하여, 특정 이벤트가 발생했을 때 필요한 작업들을 실행
- GitHub 저장소를 사용하는 개발자에게 매우 편리
2. Jenkins
- 오픈 소스 자동화 서버
- 1,000개 이상의 플러그인을 지원하여 거의 모든 종류의 CI/CD 시나리오를 처리 가능
- Groovy 기반의 Jenkinsfile을 작성하여 프로젝트의 빌드, 테스트, 배포 등의 과정을 자동화
- 구성이 다소 복잡할 수 있지만, 그만큼 강력한 커스터마이징이 가능
3. Team City
- JetBrains에서 개발한 상용 CI/CD 서버
- 도구는 소프트웨어 개발 팀이 더 빠르고 효율적으로 작업을 수행할 수 있도록 설계
- 사용자 친화적인 인터페이스와 강력한 기능이 특징으로, 구성이 쉽고 관리가 용이
- TeamCity는 사전 구성된 기능들이 풍부하여 설정 시간을 최소화하며, 빌드 구성, 테스트 결과 분석, VCS 통합 등 다양한 기능을 제공
- 더 많은 기능과 사용자 지원을 위해서는 유료 라이선스 구매 필요
4. GitLab
- GitLab은 전체 DevOps 수명 주기를 관리할 수 있는 플랫폼
- 소스 코드 관리(SCM)와 CI/CD를 한 플랫폼에서 제공하여 개발 프로세스를 간소화하고 팀 간의 협업을 촉진
- 저장소에 직접 통합되어 있어 별도의 서비스를 구축할 필요 없이 강력한 자동화 기능을 제공
- YAML 파일을 사용하여 파이프라인을 정의하고, 테스트, 빌드, 배포 등 다양한 단계를 자동으로 처리
- 오픈 소스와 상업용 버전을 모두 제공