CI/CD
IT 위키
더 많은 작업
- Continuous Integration, Continuous Delivery
- 지속적인 통합(Continuous Integration)
- 지속적인 서비스 제공(Continuous Delivery)
- 코드 변경을 자주 통합하고, 빌드·테스트·배포 과정을 자동화하여 소프트웨어를 빠르고 안정적으로 출시하는 개발 방식
| 구분 | 지속적 제공(Continuous Delivery) | 지속적 배포(Continuous Deployment) |
|---|---|---|
| 정의 | 언제든 운영 환경에 배포할 수 있는 상태로 유지 | 테스트를 통과한 변경을 운영 환경에 자동 배포 |
| 운영 배포 | 사람이 승인한 후 배포(수동 단계 존재) | 승인 없이 자동 배포 |
| 자동화 범위 | 빌드, 테스트, 스테이징 배포 | 빌드부터 운영 배포까지 전체 |
- 두 용어 모두 CD로 줄여 쓰므로 문맥에 따라 구분한다. 관련 문서: 지속적 통합과 지속적 배포
| 도구 | 특징 |
|---|---|
| Jenkins | Java 기반 오픈소스 CI 서버. 다양한 플러그인, Jenkinsfile로 파이프라인을 코드로 정의 |
| GitLab CI/CD | GitLab에 내장. 저장소의 .gitlab-ci.yml 로 파이프라인 정의 |
| GitHub Actions | GitHub에 내장. .github/workflows 의 YAML 워크플로 |
| 기타 | CircleCI, Travis CI, Argo CD(쿠버네티스 배포) 등 |
- 소스 코드 컴파일, 테스트, 패키징, 배포 등 빌드 과정을 자동으로 수행하는 도구이다.
| 도구 | 설정 파일 | 특징 |
|---|---|---|
| Ant | build.xml | Apache의 Java 빌드 도구. 절차를 XML로 자유롭게 기술하나 정해진 규칙이 적고 자체 의존성 관리 기능이 없음 |
| Maven | pom.xml | Apache. 규약(표준 디렉터리, 빌드 생명주기)과 의존성(라이브러리) 자동 관리 |
| Gradle | build.gradle(.kts) | Groovy·Kotlin DSL 사용. 증분 빌드와 빌드 캐시로 빠름. 안드로이드 공식 빌드 도구 |
| Jenkins | Jenkinsfile | 빌드 도구라기보다 빌드·테스트·배포를 실행하고 관리하는 CI 서버. Ant·Maven·Gradle과 연동 |
- 지속적 제공(수동 승인 후 배포)과 지속적 배포(자동 배포)의 차이를 구분한다.
- 빌드 자동화 도구 Ant, Maven, Gradle, Jenkins의 특징을 연결한다. Gradle은 Groovy 기반 DSL, 안드로이드 기본 빌드 도구이다.
- CI의 목적은 통합 오류의 조기 발견이다.