최근에 저희 Infograb에 GitLab에 대한 기술지원과 교육에 대한 문의 요청이 많아지고 있습니다. 그중에서도 CI/CD에 대한 고객들의 관심이 점점 증가하는 것을 느끼고 있습니다. 그래서 이번에는 GitLab CI/CD이 기본으로 제공하는 기능들을 소개를 해드리도록 하겠습니다.

photo | 인포그랩 GitLab | 인포그랩 GitLab

CI/CD 파이프라인이란?

가장 먼저 CI/CD가 무엇인지 알아봐야겠죠? 다음은 CI/CD에 대한 사전적인 의미입니다.

  • CI(Continuous Integration)
    • 저장소로 푸시할 때마다 자동으로 응용 프로그램을 빌드하고 테스트하는 스크립트 세트를 생성하여 어플리케이션의 오류 가능성 감소
  • CD(Continuous Delivery/Deployment)
    • 어플리케이션은 코드베이스로 푸시된 모든 코드 변경시 빌드되고 테스트될 뿐만 아니라 지속적으로 배포
    • 어플리케이션에서 수동으로 배포하는 대신 자동으로 배포
photo | 인포그랩 GitLab | 인포그랩 GitLab

맞습니다. CI/CD는 지속적인 통합과 배포를 의미합니다. GitLab에서는 CI/CD를 기본적으로 스테이지(Stage)와 잡(Job)으로 구성합니다. 스테이지는 이전의 스테이지가 끝나야 진행이 되고, 각 스테이지 안의 잡들은 동시에 병렬로 실행되는 것을 기본으로 합니다. 이렇게 잡과 스테이지로 구성되는 것을 바로 CI/CD 파이프라인(Pipeline)이라고 부릅니다.

photo | 인포그랩 GitLab | 인포그랩 GitLab

GitLab CI/CD 기능 소개

GitLab CI/CD 파이프라인은 GitLab의 전체 라이프사이클 중에 검증, 패키지, 코드보안, 배포까지의 영역에 포함됩니다.

photo | 인포그랩 GitLab | 인포그랩 GitLab

지금부터 검증부터 배포까지 각 영역에 해당하는 GitLab CI/CD 파이프라인의 기능들을 알아보도록 하겠습니다.

검증 (CI)

검증에서는 CI 프로세스를 통해 빌드, 테스트, 코드 검증 자동화를 구현합니다. Gitlab 의 CI 는 보안, 운영 기능과 통합되어 있어 단일 도구에서 손쉽게 의견을 주고받고 승인 절차를 구현할 수 있습니다. 또한 CI 서버는 손쉽게 확장 가능하여 대량의 병렬 처리를 가능하게 합니다.

기능 이름기능 설명사용된 오픈소스필요 라이선스특이점
CI/CD Pipelines Dashboard현재 진행 중인 모든 빌드/배포 파이프라인에 대한 통합 뷰를 제공Free
CI/CD 오토스케일링 지원사용자 환경 변화에 따라서 CI 서버를 오토스케일링Free
코드 퀄리티 리뷰CI/CD 기능과 코드 퀄리티 체크 기능이 통합되어 사용 가능Code ClimatePremium- 오픈소스 Docker 이미지를 사용
- Auto DevOps에 포함
- Merge Request에서 리포트 형식으로 제공
Multi-project pipeline프로젝트 간에 빌드를 서로 연결해서 수행하는 기능을 제공Premium
photo | 인포그랩 GitLab | 인포그랩 GitLab

패키지

패키지에서는 배포를 위한 패키지 기능을 제공합니다. 컨테이너, 아티팩트 레지스트리가 기본 제공되어 다양한 환경을 지원하며 SCM 및 CICD와 긴밀히 통합되어 프로세스를 가속화할 수 있습니다.

기능 이름기능 설명사용된 오픈소스필요 라이선스특이점
컨테이너 이미지 저장소CI/CD 과정에서 생성된 도커 컨테이너 이미지를 저장 관리Free
컨테이너 이미지 저장 정책저장된 컨테이너 이미지의 보관 기간 및 자동 삭제 정책을 지원Free
Git LFS 2.0효율적인 대용량 파일 처리를 위해 LFS (Large File System) 지원Free
Conan(C/C++) 저장소C/C++ 관련 라이브러리 저장소를 지원ConanPremium
Maven(Java) 저장소Java 관련 라이브러리 저장소를 지원MavenPremium- Java 11.0.5 이상 버전 필요
- Maven 3.6 이상 버전 필요
NPM(node) 저장소nodeJS 관련 라이브러리 저장소를 지원NPMPremium
NuGet(.Net) 저장소NuGet 관련 패키지 저장소를 지원NugetPremium
PyPI 저장소Python 관련 패키지 저장소를 지원PyPIPremium
Composer 저장소PHP를 위한 의존성 관리를 위한 저장소를 지원ComposerPremium

코드 보안

코드보안에서는 정적분석, 동적분석, 컨테이너 스캐너, 의존성 체크 기능, 라이센스 관리 기능 등 다양한 코드 보안 옵션을 제공합니다.

기능 이름기능 설명사용된 오픈소스필요 라이선스특이점
Static Application Security Testing (SAST)기존 코드와 배포되는 신규 코드와의 차이점을 분석하는 정적 분석을 수행- ESLint (Javascript & React)
- SpotBugs (Java)
Free- Docker 이미지 사용
- Merge Request에서 취약점 확인 가능
- C/C++, Java, Node.js 등 20개가 넘는 언어 지원
Compliance / Security Dashboards컴플라이언스 및 보안 관련된 내용만을 보여주는 별도의 보안 대시 보드를 제공Ultimate
Dynamic Application Security Testing (DAST)현재 배포된 웹사이트나 어플리케이션에 대한 동적 분석을 수행OWASP Zed Attack ProxyUltimate- Merge Request에서 취약점 확인 가능
Dependency Scanning보안 취약한 라이브러리를 사용하는 관련 모듈을 찾아 주는 기능을 제공- Gemnasium
- bundler-audit
- retire.js
Ultimate- Docker 이미지를 사용
- Auto DevOps에 포함
- Merge Request에서 리포트 형식으로 제공
- 언어에 따라 다른 스캔 툴 사용
Container Scanning생성된 도커 컨테이너에 대한 보안 취약점을 분석하는 기능을 제공- Clair
- Klar
Ultimate- Docker 이미지를 사용
- Auto DevOps에 포함
- Merge Request에서 리포트 형식으로 제공
License Compliance오픈 소스 라이센스에 대한 사용 여부를 소스에서 탐지해서 제공- License FinderUltimate- Docker 이미지를 사용
- Auto DevOps에 포함
- Merge Request에서 리포트 형식으로 제공
- 주로 사용되는 6개 정도의 언어 지원
Automated solutions for vulnerabilities보안 취약하다고 발견된 라이브러리나 모듈을 자동/수동으로 조치Ultimate
Credentials Management각종 보안 인증키나 개인 키를 관리Ultimate
photo | 인포그랩 GitLab | 인포그랩 GitLab

배포 (CD)

배포에서는 Gitlab 을 통해 배포와 릴리즈를 자동화시킬 수 있습니다. 간단한 설정을 통해 복잡한 canary 배포를 구현한다거나, 손쉽게 AWS/GCP 등 멀티 클라우드로 배포할 수 있습니다.

기능 이름기능 설명사용된 오픈소스필요 라이선스특이점
점진적 롤 아웃10%, 25%, 50%, 100% 등 배포 대상 환경으로 단계적 배포 기능을 지원하는 기능 제공Free
Review Apps머지 리퀘스트가 생길 때 마다 테스트 환경 자동 생성해서 리뷰 할 수 있도록 제공Free
Cache / Artifact 기능배포 과정에서 생성된 산출물을 앞/뒤 단계의 배포 작업들과 공유하거나 재사용할 수 있는 기능 제공Free
Built-in CICD 기능들SCM 도구에서 자체적으로 CI/CD 기능을 제공Free
Release Orchestration프로젝트 간 복잡한 배포 규칙 적용 등을 yaml파일을 통해서 관리 할 수 있는 기능Premium
Release Evidence배포시에 배포시간이나 정상적인 배포가 이루어졌는지에 대한 이력 감사 기능 제공Premium
Secrets Management오픈소스 볼트 (Vault) 등 활용하여 보안 토큰 관리 등 보안 기능 강화Premium
Feature Flags배포되는 기능들에 대한 관리를 위해서 특정 플래그의 활성화 여부에 따라서 해당 기능을 온/오프 할 수 있는 기능 제공Premium
Deploy Boards현재 진행되고 있는 빌드/배포 작업 들에 대한 통합 뷰를 제공Premium
photo | 인포그랩 GitLab | 인포그랩 GitLab

맺음말

지금까지 GitLab에서 기본으로 제공하는 CI/CD 파이프라인 기능을 알아봤습니다.(이번 블로그에서 설명해 드리지 못한 다양한 기능들은 GitLab 문서에서 확인이 가능합니다) GitLab CI/CD 파이프라인에서 기본적으로 제공되는 기능 이외에 다른 오픈소스나 상용 툴들을 사용도 가능합니다. 물론 대부분은 GitLab에서 제공되는 기능으로 커버가 가능합니다.

여러 가지 도구들을 통합하는 대신 GitLab을 통하여 CI/CD 파이프라인을 구성해보세요!