안녕하세요. 인포그랩에서 DevOps 엔지니어로 근무하는 John입니다. 여러분은 GitLab으로 CI/CD 파이프라인을 구성할 때, 재사용성을 높이기 위해 어떻게 하시나요? 저는 스크립트가 정의된 CI/CD 템플릿 파일을 생성하고 include하는 방식을 사용했습니다. 이 방식을 활용하면 프로젝트의 .gitlab-ci.yml
파일에 CI/CD 템플릿을 쉽게 포함할 수 있죠.
그러나 이 방식은 CI/CD 파이프라인 재사용성을 높이는 데 항상 도움이 되는 건 아니었습니다. 예를 들어, 다른 사용자가 생성한 CI/CD 템플릿을 사용할 때, 템플릿의 상세 내용을 모를 수 있는데요. 즉, CI/CD 템플릿을 사용하기 위해 ‘어떤 변수를 추가하고, 추가 스크립트를 어떻게 작성할지’ 파악하지 못할 때가 있죠. 그렇다 보니 CI/CD 파이프라인 재사용성이 떨어지기도 했습니다.
이제 GitLab CI/CD 컴포넌트(Components)와 CI/CD 카탈로그(Catalog) 기능으로 이 한계를 보완할 수 있는데요. CI/CD 컴포넌트는 GitLab CI/CD 템플릿의 차세대로, 재사용 가능한 단일 파이프라인 구성 단위입니다. CI/CD 카탈로그는 공개된 CI/CD 컴포넌트가 있는 프로젝트 목록인데요. GitLab에서는 CI/CD 컴포넌트를 CI/CD 카탈로그에 게시할 수 있고요. CI/CD 카탈로그에서 공개된 CI/CD 컴포넌트를 검색해 이용할 수 있습니다.
GitLab은 두 기능으로 CI/CD 컴포넌트 활용법, 사용할 수 있는 Inputs 변수 리스트, 예제 스크립트 등을 쉽게 파악하도록 지원합니다. 이러한 정보를 토대로 CI/CD 컴포넌트를 잘 사용해 CI/CD 파이프라인 구성을 유연하고 동적으로 만들 수 있고요. 나아가 CI/CD 파이프라인 재사용성도 높일 수 있습니다. CI/CD 컴포넌트와 CI/CD 카탈로그는 GitLab 17.0부터 GA(Generally Available) 버전으로 이용할 수 있는데요. 이 글에서는 두 기능의 사용 방법을 알아보겠습니다.
CI/CD 컴포넌트란?
CI/CD 컴포넌트는 재사용 가능한 단일 파이프라인 구성 단위입니다. CI/CD 컴포넌트로 더 큰 파이프라인의 작은 부분을 만들거나, 전체 파이프라인 구성(configuration)을 구성(compose)할 수 있는데요. GitLab 시니어 프로덕트 매니저인 Dov Hershkovitch는 GitLab 블로그의 ‘CI/CD Catalog goes GA: No more building pipelines from scratch’라는 글에서 “CI/CD 컴포넌트를 CI/CD 워크플로의 레고 조각으로 생각하라”며 “이를 사용하면, 매번 처음부터 시작할 필요 없이 파이프라인을 더 효율적으로 조립할 수 있다”라고 설명합니다.
CI/CD 컴포넌트에는 다음 특징이 있습니다.
- CI/CD 컴포넌트를 CI/CD 카탈로그에 게시해 다른 사용자도 이용할 수 있습니다.
- CI/CD 컴포넌트는 버전을 지정해 릴리즈하고 사용할 수 있습니다.
- 동일한 프로젝트에 여러 CI/CD 컴포넌트를 정의할 수 있습니다.
- CI/CD 컴포넌트는 동적인 동작을 위해 입력 매개변수로 구성할 수 있습니다.
CI/CD 컴포넌트 생성·사용법
GitLab에서 CI/CD 컴포넌트 프로젝트와 CI/CD 컴포넌트를 생성하고, 컴포넌트를 사용하는 방법을 알아보겠습니다.
프로젝트, 컴포넌트 생성하기
CI/CD 컴포넌트 프로젝트는 하나 이상 CI/CD 컴포넌트를 호스팅하는 리포지터리가 있는 GitLab 프로젝트입니다. 이 프로젝트와 CI/CD 컴포넌트 생성 방법은 다음과 같습니다.
-
GitLab에서 New Project > Create blank project를 클릭해 GitLab 프로젝트 생성 페이지로 이동합니다.
-
프로젝트 이름, 기본 README 파일 옵션 등을 확인합니다. 그다음, 아래에 Create project 버튼을 눌러 CI/CD 컴포넌트 프로젝트를 생성합니다.
GitLab 프로젝트 생성 화면
-
생성한 CI/CD 컴포넌트 프로젝트를 사용하려면, 특정 형식에 맞춰 폴더와 파일을 생성해야 합니다. 프로젝트의 디렉터리 구조는 다음과 같게 합니다.
├── templates/
│ └── test-component.yml
├── LICENSE.md
├── README.md
└── .gitlab-ci.yml-
templates
: 모든 CI/CD 컴포넌트 구성을 포함하는 최상위 디렉터리입니다. 이 디렉터리에 CI/CD 컴포넌트를 정의합니다. CI/CD 컴포넌트는 yml 확장자 파일로 생성합니다. -
.gitlab-ci.yml
: CI/CD 컴포넌트를 테스트하고 CI/CD 카탈로그로 새 버전을 릴리즈합니다. -
한편, 프로젝트에 여러 파일로 구성된 CI/CD 컴포넌트가 포함될 때는 아래 구조를 취합니다.
├── templates/
│ ├── test-component.yml
│ └── test-component/
│ ├── template.yml
│ ├── Dockerfile
│ └── test.sh
├── LICENSE.md
├── README.md
└── .gitlab-ci.yml
-
-
test-component.yml
파일을 수정해 다음과 같이 CI/CD 컴포넌트를 생성합니다.spec:
inputs:
stage:
default: test
---
component-job:
script: echo job 1
stage: $[[ inputs.stage ]]spec
: CI/CD 컴포넌트 사양을 정의합니다. 여기에는 입력 매개변수와 그 기본값이 포함됩니다.inputs
: CI/CD 컴포넌트가 받는 입력 매개변수를 정의합니다. 이 예시에서는stage
라는 매 개변수가 정의됐습니다.stage
: 이 매개변수는 job이 실행될 CI/CD 파이프라인 스테이지를 지정합니다. 기본값은test
로 설정됐습니다. 사용자는 필요에 따라 이 값을 다른 스테이지로 변경할 수 있습니다.
component-job
: 실제로 실행될 job을 정의합니다.-
script
: job이 수행할 명령어를 지정합니다. 이 예시에서는echo job 1
명령어를 실행해 "job 1"이라는 메시지를 출력합니다. -
stage
: job이 실행될 CI/CD 파이프라인 스테이지를 지정합니다.$[[ inputs.stage ]]
구문을 사용해inputs
에서 정의된stage
매개변수의 값을 참고합니다. 이는 사용자가 CI/CD 컴포넌트를 사용할 때stage
값을 지정해 job을 원하는 스테이지에서 유연하게 실행하도록 합니다.
-
컴포넌트 사용하기
CI/CD 컴포넌트를 사용하려면 include: component
키워드로 파이프라인에 이를 포함합니다. 또 inputs
키워드를 사용해 컴포넌트가 받는 매개변수를 주입합니다.
CI/CD 컴포넌트는 <gitlab-domain>/<my-group/my-project>/<component-name>@<version>
형식으로 지정해 사용할 수 있습니다. 이 글에서는 Input 키워드로 build
라는 매개변수를 활용한 CI/CD 컴포넌트 사용 방법을 소개합니다.
-
GitLab에서 CI/CD 컴포넌트를 사용하려는 프로젝트의
.gitlab-ci.yml
파일을 아래 예시에 따라 수정합니다.include:
- component: $CI_SERVER_FQDN/infograb/personal/john/catalog/test-project/test-component@main
inputs:
stage: build -
다음과 같이 Commit changes 버튼을 눌러 저장합니다.
GitLab.gitlab-ci.yml
파일 수정 화면
-
CI/CD 컴포넌트의 job이 Inputs 키워드로 입력된 build 스테이지에서 정상적으로 실행된 걸 아래와 같이 확인할 수 있습니다. 이로써 CI/CD 컴포넌트 사용 프로세스가 마무리됐습니다.
GitLab CI/CD 컴포넌트 job의 build 스테이지 실행 화면
CI/CD 카탈로그란?
CI/CD 카탈로그는 공개된 CI/CD 컴포넌트가 있는 프로젝트 목록입니다. 누구든지 CI/CD 컴포넌트 프로젝트를 만들어 CI/CD 카탈로그에 추가할 수 있죠. 또 기존 프로젝트에 기여해 CI/CD 컴포넌트를 개선할 수 있습니다. GitLab 시니어 프로덕트 매니저인 Dov Hershkovitch는 GitLab 블로그의 ‘CI/CD Catalog goes GA: No more building pipelines from scratch’라는 글에서 “CI/CD 카탈로그는 모든 GitLab 사용자가 CI/CD 컴포넌트를 쉽게 찾고, 재사용하며, 기여하도록 지원한다”며 “이는 DevSecOps 워크플로에 원활하게 통합할 수 있는 사전 구축된 CI/CD 컴포넌트에 접근해 파이프라인 구성을 만들 때, 협업과 효율을 향상한다”라고 설명합니다.
CI/CD 카탈로그에서 CI/CD 컴포넌트 가시성은 컴포넌트 소스 프로젝트의 가시성 설정을 따릅니다. 상세 내용은 다음과 같습니다.
- 비공개(Private): 소스 컴포넌트 프로젝트에 최소한 Guest 역할이 할당된 사용자에게만 표시됩니다.
- 내부(Internal): GitLab 인스턴스에 로그인한 사용자에게만 표시됩니다.
- 공개(Public): GitLab 인스턴스에 액세스 권한이 있는 모든 사람에게 표시됩니다.
GitLab CI/CD 카탈로그는 다음 경로로 볼 수 있습니다.
-
GitLab 왼쪽 사이드바에서 Search or go to를 클릭한 다음, 아래와 같이 Explore를 누릅니다.
GitLab에서 Search or go to 클릭 시 화면
-
왼쪽 사이드바에서 CI/CD Catalog를 클릭하면, 공식 카탈로그 프로젝트 또는 다른 사용자들이 배포한 카탈로그 프로젝트를 볼 수 있습니다.
GitLab CI/CD 카탈로그 화면
컴포넌트 프로젝트, CI/CD 카탈로그 게시법
CI/CD 카탈로그에 CI/CD 컴포넌트 프로젝트를 게시하는 방법을 살펴보겠습니다.
컴포넌트 프로젝트, 카탈로그 프로젝트로 설정하기
CI/CD 카탈로그에 CI/CD 컴포넌트 프로젝트의 게시된 버전을 표시하려면, 해당 프로젝트를 카탈로그 프로젝트로 설정해야 합니다. 이때 프로젝트에 Owner 역할이 있어야 합니다. 카탈로그 프로젝트 설정 순서는 다음과 같습니다.
-
GitLab 왼쪽 사이드바에서 Search or go to를 클릭합니다. 카탈로그 프로젝트로 설정할 CI/CD 컴포넌트 프로젝트를 아래와 같이 검색한 다음, 해당 프로젝트로 이동합니다.
GitLab 프로젝트 검색 화면
-
GitLab 왼쪽 사이드바에서 Settings > General을 클릭합니다.
GitLab CI/CD 컴포넌트 프로젝트 화면
-
Visibility, project features, permissions 옆에 Expand 버튼을 누릅니다.
GitLab CI/CD 컴포넌트 프로젝트 설정 화면
-
아래와 같이 CI/CD Catalog project 토글을 클릭해 기능을 활성화합니다. Save Changes 버튼을 눌러 변경 사항을 저장합니다.
GitLab CI/CD Catalog project 기능 활성화 화면
-
이제 CI/CD Catalog project 배지가 프로젝트 이름 옆에 생긴 걸 확인할 수 있습니다.
CI/CD Catalog project 배지가 추가된 GitLab CI/CD 컴포넌트 프로젝트 화면
참고지금 상태에서 배지를 클릭하면 404 오류 페이지가 뜰 수 있습니다. 이는 해당 프로젝트가 CI/CD 카탈로그에 릴리즈되지 않아 발생하는 오류입니다.
이때
.gitlab-ci.yml
파일에 다음 스크립트를 추가해 Release Tag를 업데이트할 때마다 해당 프로젝트가 CI/CD 카탈로그에 릴리즈되도록 설정합니다.create-release:
stage: deploy
image: registry.gitlab.com/gitlab-org/release-cli:latest
script: echo "Creating release $CI_COMMIT_TAG"
rules:
- if: $CI_COMMIT_TAG
release:
tag_name: $CI_COMMIT_TAG
description: "Release $CI_COMMIT_TAG of components in $CI_PROJECT_PATH"파이프라인이 정상적으로 작동하려면 다음 요소를 지켜야 합니다.
- 카탈로그 프로젝트로 설정돼야 함.
- 프로젝트 설명이 정의돼야 함.
- 디렉터리 최상단에 README.md 파일이 있어야 함.
- templates 디렉터리에 적어도 하나의 CI/CD 컴포넌트가 있어야 함.
컴포넌트 프로젝트, CI/CD 카탈로그에 게시하기
이제 태그를 생성해 CI/CD 카탈로그에 CI/CD 컴포넌트 프로젝트를 게시하겠습니다.
-
GitLab 왼쪽 사이드바에서 Code > Tags를 클릭합니다.
카탈로그 프로젝트로 설정한 GitLab CI/CD 컴포넌트 프로젝트 화면
-
New tag 버튼을 눌러 태그 생성 페이지로 이동합니다.
GitLab CI/CD 컴포넌트 프로젝트 Tags 페이지 화면
-
태그 이름, 브랜치, 메시지를 작성하고 Create tag 버튼을 클릭해 태그를 생성합니다.
GitLab CI/CD 컴포넌트 프로젝트 태그 생성 화면
-
정상적으로 태그가 생성되고 파이프라인이 작동하는 걸 확인할 수 있습니다.
GitLab 파이프라인 상태 화면
-
파이프라인이 작동한 이후 다시 CI/CD Catalog 배지를 클릭하면 아래 화면을 볼 수 있습니다.
Components 페이지와 Readme 페이지가 있는데요. Components 페이지에서는 CI/CD 컴포넌트 활용 방법과 사용할 수 있는 Inputs 변수 리스트를 볼 수 있습니다. 각 입력 키의 역할과 사용 예시도 확인할 수 있습니다.
GitLab CI/CD 컴포넌트 프로젝트 Components 페이지 화면
-
Readme 페이지에서는 해당 CI/CD 컴포넌트 프로젝트의 README.md 파일 내용을 볼 수 있습니다. 이 파일에는 CI/CD 컴포넌트 사용 설명, 예제 스크립트, 자주 묻는 질문(FAQ)이 있습니다. 이 문서를 보면 CI/CD 컴포넌트 프로젝트의 전반적인 구조와 사용법을 파악할 수 있습니다. 추가 설정, 확장 방법도 알 수 있습니다.
GitLab CI/CD 컴포넌트 프로젝트 Readme 페이지 화면
맺음말
지금까지 GitLab CI/CD 컴포넌트와 CI/CD 카탈로그 사용 방법을 알아봤습니다. 저는 ‘CI/CD 컴포넌트의 체계적 문서화’가 두 기능의 큰 장점이라고 생각합니다. 문서화 덕분에 CI/CD 컴포넌트를 더 쉽게 이해하고 잘 활용할 수 있었고요. 문서화가 부족한 템플릿을 사용할 때 불편이 크게 줄었습니다.
여러분도 CI/CD 컴포넌트와 CI/CD 카탈로그로 파이프라인 개발을 간소화하며 DevOps 업무 효율을 높이세요. 이상 글을 마칩니다. 읽어주셔서 감사합니다. 🙂
참고 자료
- “CI/CD components”, GitLab, https://docs.gitlab.com/ee/ci/components/
- “CI/CD 컴포넌트”, GitLab 공식 기술 문서 한글판 by 인포그랩, https://gitlab-docs.infograb.net/ee/ci/components/#publish-a-new-release
- Dov Hershkovitch, “CI/CD Catalog goes GA: No more building pipelines from scratch”, GitLab, 2024.5.8, https://about.gitlab.com/blog/2024/05/08/ci-cd-catalog-goes-ga-no-more-building-pipelines-from-scratch/
- Michael, “GitLab 차세대 'CI/CD 컴포넌트' 알아보기”, 인포그랩, 2024.5.8, https://insight.infograb.net/blog/2024/05/08/cicd-component/
인포그랩의 DevOps 전문가와 함께 더 많은 GitLab 정보와 데모를 확인하세요.