---
title: "GitLab CI/CD 파이프라인 기능 소개"
description: "이번 블로그에서는 GitLab의 핵심 기능중 하나인 CI/CD 파이프라인에서 제공되는 기본 기능들을 살펴봅니다."
url: https://insight.infograb.net/blog/2021/04/08/gitlab-cicd-pipeline/
source: content/blog/archive/2021-04-08-gitlab-cicd-pipeline.md
---

import Image from "../src/components/Image"

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

![](/img/blog/2021-04-08-gitlab-cicd-pipeline.webp)

## CI/CD 파이프라인이란?

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

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

![](/img/blog/2021-04-gitlab-cicd-pipeline-0.webp)

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

![](/img/blog/2021-04-gitlab-cicd-pipeline-1.webp)

## GitLab CI/CD 기능 소개

GitLab CI/CD 파이프라인은 GitLab의 전체 라이프사이클 중에 검증, 패키지, 코드보안, 배포까지의 영역에 포함됩니다.
![](/img/blog/2021-04-gitlab-cicd-pipeline-2.webp)

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

### 검증 (CI)

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

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

![](/img/blog/2021-04-gitlab-cicd-pipeline-3.webp)

### 패키지

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

| 기능 이름                 | 기능 설명                                                     | 사용된 오픈소스                      | 필요 라이선스 | 특이점                                                         |
| ------------------------- | ------------------------------------------------------------- | ------------------------------------ | ------------- | -------------------------------------------------------------- |
| 컨테이너 이미지 저장소    | CI/CD 과정에서 생성된 도커 컨테이너 이미지를 저장 관리        |                                      | Free          |                                                                |
| 컨테이너 이미지 저장 정책 | 저장된 컨테이너 이미지의 보관 기간 및 자동 삭제 정책을 지원   |                                      | Free          |                                                                |
| Git LFS 2.0               | 효율적인 대용량 파일 처리를 위해 LFS (Large File System) 지원 |                                      | Free          |                                                                |
| Conan(C/C++) 저장소       | C/C++ 관련 라이브러리 저장소를 지원                           | [Conan](https://conan.io/)           | Premium       |                                                                |
| Maven(Java) 저장소        | Java 관련 라이브러리 저장소를 지원                            | [Maven](https://maven.apache.org/)   | Premium       | - Java 11.0.5 이상 버전 필요 <br /> - Maven 3.6 이상 버전 필요 |
| NPM(node) 저장소          | nodeJS 관련 라이브러리 저장소를 지원                          | [NPM](https://www.npmjs.com/)        | Premium       |                                                                |
| NuGet(.Net) 저장소        | NuGet 관련 패키지 저장소를 지원                               | [Nuget](https://www.nuget.org/)      | Premium       |                                                                |
| PyPI 저장소               | Python 관련 패키지 저장소를 지원                              | [PyPI](https://pypi.org/)            | Premium       |                                                                |
| Composer 저장소           | PHP를 위한 의존성 관리를 위한 저장소를 지원                   | [Composer](https://getcomposer.org/) | Premium       |                                                                |

### 코드 보안

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

| 기능 이름                                                                                                              | 기능 설명                                                                  | 사용된 오픈소스                                                                                                                                                                                 | 필요 라이선스 | 특이점                                                                                                                                         |
| ---------------------------------------------------------------------------------------------------------------------- | -------------------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | ------------- | ---------------------------------------------------------------------------------------------------------------------------------------------- |
| [Static Application Security Testing (SAST)](https://docs.gitlab.com/ee/user/application_security/sast/analyzers.html) | 기존 코드와 배포되는 신규 코드와의 차이점을 분석하는 정적 분석을 수행      | - [ESLint](https://gitlab.com/gitlab-org/security-products/analyzers/eslint) (Javascript & React) <br/> - [SpotBugs](https://gitlab.com/gitlab-org/security-products/analyzers/spotbugs) (Java) | Free          | - Docker 이미지 사용 <br />- Merge Request에서 취약점 확인 가능 <br /> - C/C++, Java, Node.js 등 20개가 넘는 언어 지원                         |
| Compliance / Security Dashboards                                                                                       | 컴플라이언스 및 보안 관련된 내용만을 보여주는 별도의 보안 대시 보드를 제공 |                                                                                                                                                                                                 | Ultimate      |                                                                                                                                                |
| [Dynamic Application Security Testing (DAST)](https://docs.gitlab.com/ee/user/application_security/dast/)              | 현재 배포된 웹사이트나 어플리케이션에 대한 동적 분석을 수행                | [OWASP Zed Attack Proxy](https://www.zaproxy.org/)                                                                                                                                              | Ultimate      | - Merge Request에서 취약점 확인 가능                                                                                                           |
| [Dependency Scanning](https://docs.gitlab.com/ee/user/application_security/dependency_scanning/analyzers.html)         | 보안 취약한 라이브러리를 사용하는 관련 모듈을 찾아 주는 기능을 제공        | - [Gemnasium](http://docs.gemnasium.net/en/stable/welcome.html) <br /> - [bundler-audit](https://github.com/rubysec/bundler-audit)<br /> - [retire.js](https://retirejs.github.io/retire.js/)   | Ultimate      | - Docker 이미지를 사용 <br /> - Auto DevOps에 포함 <br /> - Merge Request에서 리포트 형식으로 제공 <br />- 언어에 따라 다른 스캔 툴 사용       |
| [Container Scanning](https://docs.gitlab.com/ee/user/application_security/container_scanning/)                         | 생성된 도커 컨테이너에 대한 보안 취약점을 분석하는 기능을 제공             | - [Clair](https://github.com/quay/clair) <br /> - [Klar](https://github.com/optiopay/klar)                                                                                                      | Ultimate      | - Docker 이미지를 사용 <br /> - Auto DevOps에 포함 <br /> - Merge Request에서 리포트 형식으로 제공                                             |
| License Compliance                                                                                                     | 오픈 소스 라이센스에 대한 사용 여부를 소스에서 탐지해서 제공               | - [License Finder](https://github.com/pivotal/LicenseFinder)                                                                                                                                    | Ultimate      | - Docker 이미지를 사용 <br /> - Auto DevOps에 포함 <br /> - Merge Request에서 리포트 형식으로 제공 <br /> - 주로 사용되는 6개 정도의 언어 지원 |
| Automated solutions for vulnerabilities                                                                                | 보안 취약하다고 발견된 라이브러리나 모듈을 자동/수동으로 조치              |                                                                                                                                                                                                 | Ultimate      |                                                                                                                                                |
| Credentials Management                                                                                                 | 각종 보안 인증키나 개인 키를 관리                                          |                                                                                                                                                                                                 | Ultimate      |                                                                                                                                                |

![](/img/blog/2021-04-gitlab-cicd-pipeline-4.webp)

### 배포 (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       |        |

![](/img/blog/2021-04-gitlab-cicd-pipeline-5.webp)

## 맺음말

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

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

::cta::

::button::[GitLab CI/CD 파이프라인을 처음부터 제대로 구성하고 싶으신가요? GitLab 공식 파트너 인포그랩과 상담하세요!](https://insight.infograb.net/contact/)::
