최근에 저희 Infograb에 GitLab에 대한 기술지원과 교육에 대한 문의 요청이 많아지고 있습니다. 그중에서도 CI/CD에 대한 고객들의 관심이 점점 증 가하는 것을 느끼고 있습니다. 그래서 이번에는 GitLab CI/CD이 기본으로 제공하는 기능들을 소개를 해드리도록 하겠습니다.
CI/CD 파이프라인이란?
가장 먼저 CI/CD가 무엇인지 알아봐야겠죠? 다음은 CI/CD에 대한 사전적인 의미입니다.
- CI(Continuous Integration)
- 저장소로 푸시할 때마다 자동으로 응용 프로그램을 빌드하고 테스트하는 스크립트 세트를 생성하여 어플리케이션의 오류 가능성 감소
- CD(Continuous Delivery/Deployment)
- 어플리케이션은 코드베이스로 푸시된 모든 코드 변경시 빌드되고 테스트될 뿐만 아니라 지속적으로 배포
- 어플리케이션에서 수동으로 배포하는 대신 자동으로 배포
맞습니다. CI/CD는 지속적인 통합과 배포를 의미합니다. GitLab에서는 CI/CD를 기본적으로 스테이지(Stage)와 잡(Job)으로 구성합니다. 스테이지는 이전의 스테이지가 끝나야 진행이 되고, 각 스테이지 안의 잡들은 동시에 병렬로 실행되는 것을 기본으로 합니다. 이렇게 잡과 스테이지로 구성되는 것을 바 로 CI/CD 파이프라인(Pipeline)이라고 부릅니다.
GitLab CI/CD 기능 소개
GitLab CI/CD 파이프라인은 GitLab의 전체 라이프사이클 중에 검증, 패키지, 코드보안, 배포까지의 영역에 포함됩니다.
지금부터 검증부터 배포까지 각 영역에 해당하는 GitLab CI/CD 파이프라인의 기능들을 알아보도록 하겠습니다.
검증 (CI)
검증에서는 CI 프로세스를 통해 빌드, 테스트, 코드 검증 자동화를 구현합니다. Gitlab 의 CI 는 보안, 운영 기능과 통합되어 있어 단일 도구에서 손쉽게 의견을 주고받고 승인 절차를 구현할 수 있습니다. 또한 CI 서버는 손쉽게 확장 가능하여 대량의 병렬 처리를 가능하게 합니다.
기능 이름 | 기능 설명 | 사용된 오픈소스 | 필요 라이선스 | 특이점 |
---|---|---|---|---|
CI/CD Pipelines Dashboard | 현재 진행 중인 모든 빌드/배포 파이프라인에 대한 통합 뷰를 제공 | Free | ||
CI/CD 오토스케일링 지원 | 사용자 환경 변화에 따라서 CI 서버를 오토스케일링 | Free | ||
코드 퀄리티 리뷰 | CI/CD 기능과 코드 퀄리티 체크 기능이 통합되어 사용 가능 | Code Climate | Premium | - 오픈소스 Docker 이미지를 사용 - Auto DevOps에 포함 - Merge Request에서 리포트 형식으로 제공 |
Multi-project pipeline | 프로젝트 간에 빌드를 서로 연결해서 수행하는 기능을 제공 | Premium |
패키지
패키지에서는 배포를 위한 패키지 기능을 제공합니다. 컨테이너, 아티팩트 레지스트리가 기본 제공되어 다양한 환경을 지원하며 SCM 및 CICD와 긴밀히 통합되어 프로세스를 가속화할 수 있습니다.
기능 이름 | 기능 설명 | 사용된 오픈소스 | 필요 라이선스 | 특이점 |
---|---|---|---|---|
컨테이너 이미지 저장소 | CI/CD 과정에서 생성된 도커 컨테이너 이미지를 저장 관리 | Free | ||
컨테이너 이미지 저장 정책 | 저장된 컨테이너 이미지의 보관 기간 및 자동 삭제 정책을 지원 | Free | ||
Git LFS 2.0 | 효율적인 대용량 파일 처리를 위해 LFS (Large File System) 지원 | Free | ||
Conan(C/C++) 저장소 | C/C++ 관련 라이브러리 저장소를 지원 | Conan | Premium | |
Maven(Java) 저장소 | Java 관련 라이브러리 저장소를 지원 | Maven | Premium | - Java 11.0.5 이상 버전 필요 - Maven 3.6 이상 버전 필요 |
NPM(node) 저장소 | nodeJS 관련 라이브러리 저장소를 지원 | NPM | Premium | |
NuGet(.Net) 저장소 | NuGet 관련 패키지 저장소를 지원 | Nuget | Premium | |
PyPI 저장소 | Python 관련 패키지 저장소를 지원 | PyPI | Premium | |
Composer 저장소 | PHP를 위한 의존성 관리를 위한 저장소를 지원 | Composer | Premium |
코드 보안
코드보안에서는 정적분석, 동적분석, 컨테이너 스캐너, 의존성 체크 기능, 라이센스 관리 기능 등 다양한 코드 보안 옵션을 제공합니다.
기능 이름 | 기능 설명 | 사용된 오픈소스 | 필요 라이선스 | 특이점 |
---|---|---|---|---|
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 Proxy | Ultimate | - 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 Finder | Ultimate | - Docker 이미지를 사용 - Auto DevOps에 포함 - Merge Request에서 리포트 형식으로 제공 - 주로 사용되는 6개 정도의 언어 지원 |
Automated solutions for vulnerabilities | 보안 취약하다고 발견된 라이브러리나 모듈을 자동/수동으로 조치 | Ultimate | ||
Credentials Management | 각종 보안 인증키나 개인 키를 관리 | Ultimate |
배포 (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 |
맺음말
지금까지 GitLab에서 기본으로 제공하는 CI/CD 파이프라인 기능을 알아봤습니다.(이번 블로그에서 설명해 드리지 못한 다양한 기능들은 GitLab 문서에서 확인이 가능합니다) GitLab CI/CD 파이프라인에서 기본적으로 제공되는 기능 이외에 다른 오픈소스나 상용 툴들을 사용도 가능합니다. 물론 대부분은 GitLab에서 제공되는 기능으로 커버가 가능합니다.
여러 가지 도구들을 통합하는 대신 GitLab을 통하여 CI/CD 파이프라인을 구성해보세요!