안녕하세요. 인포그랩에서 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 컴포넌트 생성 방법은 다음과 같습니다.

  1. GitLab에서 New Project > Create blank project를 클릭해 GitLab 프로젝트 생성 페이지로 이동합니다.

  2. 프로젝트 이름, 기본 README 파일 옵션 등을 확인합니다. 그다음, 아래에 Create project 버튼을 눌러 CI/CD 컴포넌트 프로젝트를 생성합니다.

    GitLab 프로젝트 생성 화면 | 인포그랩 GitLab
    GitLab 프로젝트 생성 화면

  3. 생성한 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
  4. 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 컴포넌트 사용 방법을 소개합니다.

  1. GitLab에서 CI/CD 컴포넌트를 사용하려는 프로젝트의 .gitlab-ci.yml 파일을 아래 예시에 따라 수정합니다.

    include:
    - component: $CI_SERVER_FQDN/infograb/personal/john/catalog/test-project/test-component@main
    inputs:
    stage: build
  2. 다음과 같이 Commit changes 버튼을 눌러 저장합니다.

    GitLab `.gitlab-ci.yml` 파일 수정 화면 | 인포그랩 GitLab
    GitLab .gitlab-ci.yml 파일 수정 화면

  3. CI/CD 컴포넌트의 job이 Inputs 키워드로 입력된 build 스테이지에서 정상적으로 실행된 걸 아래와 같이 확인할 수 있습니다. 이로써 CI/CD 컴포넌트 사용 프로세스가 마무리됐습니다.

    GitLab CI/CD 컴포넌트 job의 build 스테이지 실행 화면 | 인포그랩 GitLab
    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 카탈로그는 다음 경로로 볼 수 있습니다.

  1. GitLab 왼쪽 사이드바에서 Search or go to를 클릭한 다음, 아래와 같이 Explore를 누릅니다.

    GitLab에서 **Search or go to** 클릭 시 화면 | 인포그랩 GitLab
    GitLab에서 Search or go to 클릭 시 화면

  2. 왼쪽 사이드바에서 CI/CD Catalog를 클릭하면, 공식 카탈로그 프로젝트 또는 다른 사용자들이 배포한 카탈로그 프로젝트를 볼 수 있습니다.

    GitLab CI/CD 카탈로그 화면 | 인포그랩 GitLab
    GitLab CI/CD 카탈로그 화면

컴포넌트 프로젝트, CI/CD 카탈로그 게시법

CI/CD 카탈로그에 CI/CD 컴포넌트 프로젝트를 게시하는 방법을 살펴보겠습니다.

컴포넌트 프로젝트, 카탈로그 프로젝트로 설정하기

CI/CD 카탈로그에 CI/CD 컴포넌트 프로젝트의 게시된 버전을 표시하려면, 해당 프로젝트를 카탈로그 프로젝트로 설정해야 합니다. 이때 프로젝트에 Owner 역할이 있어야 합니다. 카탈로그 프로젝트 설정 순서는 다음과 같습니다.

  1. GitLab 왼쪽 사이드바에서 Search or go to를 클릭합니다. 카탈로그 프로젝트로 설정할 CI/CD 컴포넌트 프로젝트를 아래와 같이 검색한 다음, 해당 프로젝트로 이동합니다.

    GitLab 프로젝트 검색 화면 | 인포그랩 GitLab
    GitLab 프로젝트 검색 화면

  2. GitLab 왼쪽 사이드바에서 Settings > General을 클릭합니다.

    GitLab CI/CD 컴포넌트 프로젝트 화면 | 인포그랩 GitLab
    GitLab CI/CD 컴포넌트 프로젝트 화면

  3. Visibility, project features, permissions 옆에 Expand 버튼을 누릅니다.

    GitLab CI/CD 컴포넌트 프로젝트 설정 화면 | 인포그랩 GitLab
    GitLab CI/CD 컴포넌트 프로젝트 설정 화면

  4. 아래와 같이 CI/CD Catalog project 토글을 클릭해 기능을 활성화합니다. Save Changes 버튼을 눌러 변경 사항을 저장합니다.

    GitLab CI/CD Catalog project 기능 활성화 화면 | 인포그랩 GitLab
    GitLab CI/CD Catalog project 기능 활성화 화면

  5. 이제 CI/CD Catalog project 배지가 프로젝트 이름 옆에 생긴 걸 확인할 수 있습니다.

    CI/CD Catalog project 배지가 추가된 GitLab CI/CD 컴포넌트 프로젝트 화면 | 인포그랩 GitLab
    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 컴포넌트 프로젝트를 게시하겠습니다.

  1. GitLab 왼쪽 사이드바에서 Code > Tags를 클릭합니다.

    카탈로그 프로젝트로 설정한 GitLab CI/CD 컴포넌트 프로젝트 화면 | 인포그랩 GitLab
    카탈로그 프로젝트로 설정한 GitLab CI/CD 컴포넌트 프로젝트 화면

  2. New tag 버튼을 눌러 태그 생성 페이지로 이동합니다.

    GitLab CI/CD 컴포넌트 프로젝트 Tags 페이지 화면 | 인포그랩 GitLab
    GitLab CI/CD 컴포넌트 프로젝트 Tags 페이지 화면

  3. 태그 이름, 브랜치, 메시지를 작성하고 Create tag 버튼을 클릭해 태그를 생성합니다.

    GitLab CI/CD 컴포넌트 프로젝트 태그 생성 화면 | 인포그랩 GitLab
    GitLab CI/CD 컴포넌트 프로젝트 태그 생성 화면

  4. 정상적으로 태그가 생성되고 파이프라인이 작동하는 걸 확인할 수 있습니다.

    GitLab 파이프라인 상태 화면 | 인포그랩 GitLab
    GitLab 파이프라인 상태 화면

  5. 파이프라인이 작동한 이후 다시 CI/CD Catalog 배지를 클릭하면 아래 화면을 볼 수 있습니다.

    Components 페이지와 Readme 페이지가 있는데요. Components 페이지에서는 CI/CD 컴포넌트 활용 방법과 사용할 수 있는 Inputs 변수 리스트를 볼 수 있습니다. 각 입력 키의 역할과 사용 예시도 확인할 수 있습니다.

    GitLab CI/CD 컴포넌트 프로젝트 Components 페이지 화면 | 인포그랩 GitLab
    GitLab CI/CD 컴포넌트 프로젝트 Components 페이지 화면

  6. Readme 페이지에서는 해당 CI/CD 컴포넌트 프로젝트의 README.md 파일 내용을 볼 수 있습니다. 이 파일에는 CI/CD 컴포넌트 사용 설명, 예제 스크립트, 자주 묻는 질문(FAQ)이 있습니다. 이 문서를 보면 CI/CD 컴포넌트 프로젝트의 전반적인 구조와 사용법을 파악할 수 있습니다. 추가 설정, 확장 방법도 알 수 있습니다.

    GitLab CI/CD 컴포넌트 프로젝트 Readme 페이지 화면 | 인포그랩 GitLab
    GitLab CI/CD 컴포넌트 프로젝트 Readme 페이지 화면

맺음말

지금까지 GitLab CI/CD 컴포넌트와 CI/CD 카탈로그 사용 방법을 알아봤습니다. 저는 ‘CI/CD 컴포넌트의 체계적 문서화’가 두 기능의 큰 장점이라고 생각합니다. 문서화 덕분에 CI/CD 컴포넌트를 더 쉽게 이해하고 잘 활용할 수 있었고요. 문서화가 부족한 템플릿을 사용할 때 불편이 크게 줄었습니다.

여러분도 CI/CD 컴포넌트와 CI/CD 카탈로그로 파이프라인 개발을 간소화하며 DevOps 업무 효율을 높이세요. 이상 글을 마칩니다. 읽어주셔서 감사합니다. 🙂

참고 자료

  1. “CI/CD components”, GitLab, https://docs.gitlab.com/ee/ci/components/
  2. “CI/CD 컴포넌트”, GitLab 공식 기술 문서 한글판 by 인포그랩, https://gitlab-docs.infograb.net/ee/ci/components/#publish-a-new-release
  3. 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/
  4. Michael, “GitLab 차세대 'CI/CD 컴포넌트' 알아보기”, 인포그랩, 2024.5.8, https://insight.infograb.net/blog/2024/05/08/cicd-component/

인포그랩의 DevOps 전문가와 함께 더 많은 GitLab 정보와 데모를 확인하세요.