GitLab을 사용하여 지속적 통합 (CI)
지속적인 통합이 기본 제공됩니다
**지속적 통합(Continuous Integration, CI)**은 팀이 제 공하는 코드를 공유 리포지터리에 통합하는 작업을 합니다. 개발자는 병합 요청(MR)에서 새 코드를 공유합니다. 요청은 리포지터리 내에서 변경사항을 병합하기 전에 새 코드를 빌드, 테스트 및 검증하는 파이프라인을 트리거합니다.
**지속적 전달(Continuous Delivery, CD)**의 관행은 구조화된 배포 파이프라인을 통해 CI 검증 코드를 애플리케이션에 전달하도록 보장합니다.
CI와 CD가 함께 사용하면 팀이 고객과 이해 관계자를 위해 더 빠른 결과를 제공할 수 있습니다. CI는 개발 주기 초기에 버그를 포착하고 제거하는 데 도움이 되며 CD는 검증된 코드만 애플리케이션에 전송되도록 합니다.
CI와 CD는 팀이 신속하고 효과적으로 구축할 수 있도록 함께 작동해야 하며, 완전히 최적화된 소프트웨어 개발에 중요합니다.
팀에 CI가 필요한 이유
더 적은 수작업, 더 많은 자동화
- 가능한 한 빨리 오류 감지 : 개발자 마음에 새롭다고 생각하는 동안 문제 해결
- 통합 문제 감소 : 작은 문제가 이해하고 해결하기 더 쉬움
- 복합적인 문제 방지 : 팀이 더 확신을 가지고 더 빠르게 개발할 수 있음
CD에 대한 원활한 경로
- 모든 변경사항이 릴리즈할 수 있도록 보장 : 완료라고 부르기 전에, 배포를 포함한 모든 것을 테스트
- 각 릴리즈의 리스크 감소 : 릴리즈를 "지루하게" 만듦
- 보다 빈번한 가치 제공 : 안정적인 배포는 더 많은 릴리즈를 의미
- 긴밀한 고객 피드백 루프 : 변경과 관련한 빠르고 빈번한 고객 피드백
CI를 위한 GitLab 사용의 장점
- 통합 : CI가 GitLab에 내장되어 아이디어에서 계획, 배포(및 그 이후)에 이르기까지 단일 대화가 가능합니다.
- 오픈 소스 : CI는 CD와 함께 오픈 소스 GitLab Community Edition과 저작권이 있는 GitLab Enterprise Edition의 일부입니다.
- 배우기 쉬움 : 빠른 시작 가이드를 참조하세요.
- 끊김 없는 : 단일 GitLab 애플리케이션의 일부이며 뛰어난 단일 사용자 경험을 제공합니다.
- 확장성 : 테스트는 별도의 시스템에 분산되어 실행됩니다. 원하는 만큼 추가할 수 있습니다.
- 더 빠른 결과 : 각 빌드를 여러 시스템에서 병렬로 실행되는 여러 작업으로 분할할 수 있습니다.
- 전달(delivery)에 최적화됨 : 여러 단계, 수동 배포 게이트, 환경 및 변수
특징
- 다중 플랫폼 : Unix, Windows, macOS 및 Go를 지원하는 기타 플랫폼에서 빌드를 실행합니다.
- 다중 언어 : 빌드 스크립트는 명령줄 기반이며 Java, PHP, Ruby, C 및 기타 모든 언어에서 작동합니다.
- 안정적 : 빌드가 GitLab과 다른 머신에서 실행됩니다.
- 병렬 빌드 : GitLab은 더 빠른 실행을 위해 여러 머신에 빌드를 분할합니다.
- 실시간 로깅 : 병합 요청의 링크를 통해 동적으로 업데이트되는 현재 빌드 로그로 이동합니다.
- 유연한 파이프라인 : 단계 당 여러 개의 병렬 작업을 정의하고 다른 빌드를 트리거할 수 있습니다.
- 버전 파이프라인 : .gitlab-ci.yml 파일에는 테스트와 전체 프로세스 단계가 포함되어 있어, 모두가 변경사항에 기여하고 모든 브랜치가 필요한 파이프라인을 확보할 수 있도록 합니다.
- 자동 확장 : VM을 자동으로 스핀 업 및 다운하여 비용을 최소화하고 빌드가 즉시 처리되도록 합니다.
- 작업 아티팩트 : GitLab Runner는 GitLab UI 또는 GitLab API를 사용하여 단일 아카이브로 다운로드할 수 있는 바이너리 및 기타 작업 아티팩트를 GitLab에 업로드합니다.
- 로컬 테스트 : 여러 Executor가 있으며 로컬에서 테스트를 재현할 수 있습니다.
- Docker 지원 : 커스텀 Docker 이미지를 사용하고, 테스트의 일부로 서비스를 스핀업하며, 새로운 Docker 이미지를 빌드하고, Kubernetes에서 실행할 수도 있습니다.
- 컨테이너 레지스트리 : 컨테이너 이미지를 저장, 공유, 사용하기 위한 내장된 컨테이너 레지스트리입니다.
- 보호된 변수 : 환경별 보호 변수를 사용하여 배포 중에 시크릿을 안전하게 저장하고 사용합니다.
- 환경 : 임시 리뷰 앱을 포함한 여러 환경을 정의하고, 모든 환경에 대한 배포 기록을 확인합니다.