CI/CD 컴포넌트는 GitLab CI/CD 템플릿의 차세대로, 파이프라인 생성과 유지 관리를 개선합니다. 이는 입력 매개변수를 사용하여 맞춤화할 수 있는, 재사용 가능한 파이프라인 구성을 제공하죠.

최근 GitLab은 CI/CD 컴포넌트와 CI/CD 파이프라인을 구성하는 새로운 접근 방식을 도입했고요. 기존 CI/CD 템플릿을 CI/CD 컴포넌트로 리팩토링하도록 권합니다. 물론 GitLab은 CI/CD 템플릿을 계속 지원하는데요. CI/CD 컴포넌트를 도입해 이 템플릿의 여러 단점을 해결했습니다.

이 글에서는 CI/CD 컴포넌트 개념과 장점을 소개하고요. CI/CD 템플릿을 CI/CD 컴포넌트로 변환하는 방법과 고품질 컴포넌트 프로젝트를 만드는 모범 관행을 살펴보겠습니다.

CI/CD 컴포넌트란?

GitLab의 ‘Talk: Efficient DevSecOps workflows with reusable CI/CD components’ 영상에서 소개한 CI/CD 템플릿, CI/CD 컴포넌트, CI/CD 카탈로그 개념. 출처=GitLab | 인포그랩 GitLab
GitLab의 ‘Talk: Efficient DevSecOps workflows with reusable CI/CD components’ 영상에서 소개한 CI/CD 템플릿, CI/CD 컴포넌트, CI/CD 카탈로그 개념. 출처=GitLab

CI/CD 컴포넌트는 재사용 가능한 단일 파이프라인 구성 단위입니다. 이 기능은 GitLab Free, Premium, Ultimate 사용자라면 누구나 이용할 수 있고요. SaaS, 자체 관리형, Dedicated를 비롯한 모든 GitLab 서비스에 제공합니다. CI/CD 컴포넌트는 현재 베타 단계에 있습니다(2024년 5월 7일 기준).

이 기능을 사용하면 더 큰 파이프라인의 작은 부분을 만들거나, 전체 파이프라인 구성(configuration)을 구성(compose)할 수 있습니다. 아울러 컴포넌트는 동적인 동작을 위해 입력 매개변수를 사용해 구성할 수 있고요.

CI/CD 컴포넌트의 장점은 다음과 같습니다.

  • 컴포넌트를 CI/CD 카탈로그에 게시할 수 있습니다.
  • 컴포넌트를 특정 버전으로 릴리즈하고, 사용할 수 있습니다.
  • 여러 컴포넌트를 동일한 프로젝트에 정의하고, 함께 버전을 관리할 수 있습니다.

한편, 사용자는 ‘CI/CD 카탈로그’에서 자기에게 필요한 기능이 있는, 공개된 컴포넌트를 검색해 이용할 수도 있습니다.

CI/CD 카탈로그란?

CI/CD 워크플로를 확장하는 데 사용할 수 있는, 공개된 CI/CD 컴포넌트가 있는 프로젝트 목록입니다. 누구나 컴포넌트 프로젝트를 만들어 CI/CD 카탈로그에 추가할 수 있고요. 기존 프로젝트에 기여해 컴포넌트를 개선할 수도 있습니다.

이 기능은 GitLab Free, Premium, Ultimate 사용자 누구나 이용할 수 있고요. SaaS, 자체 관리형, Dedicated를 포함한 모든 GitLab 서비스에 제공합니다. 현재 CI/CD 카탈로그는 베타 단계에 있습니다(2024년 5월 7일 기준). CI/CD 카탈로그 데모를 체험하려면 이 링크를 클릭하세요.

템플릿을 컴포넌트로 변환하기

CI/CD 템플릿을 CI/CD 컴포넌트로 변환하는 방법을 순서대로 살펴보겠습니다.

  1. 컴포넌트 프로젝트가 없으면 이를 만들어 주세요.
  2. 기존 템플릿을 컴포넌트 프로젝트의 '템플릿' 디렉터리에 복사합니다.
  3. 템플릿에 나열된 job을 검토하고, ‘여러 컴포넌트에 이를 배포할지 아니면 동일한 컴포넌트 안에 일부 또는 전부를 유지할지’ 평가합니다. 단일 컴포넌트에 여러 job을 포함할 수도 있지만 최소한의 작업을 수행하는 컴포넌트를 만드는 게 좋습니다. 이 접근 방식은 재사용의 용이성과 유연성을 향상합니다.
  4. spec 키워드를 사용하여 구성 상단에 입력 매개변수와 메타 데이터의 새로운 섹션을 만듭니다.
  5. 맞춤형 CI/CD 변수와 기타 하드코딩된 값을 입력으로 대체하여 사용 유연성을 극대화하세요. 스테이지, 이미지, job 이름/job 접두사 등과 같은 요소를 매개변수화하는 걸 고려해 보세요.
  6. 컴포넌트의 모범 관행을 따르세요.
  7. 예를 들어, Merge Request 파이프라인을 활성화하거나 이를 더 효율적으로 만들면서 구성을 개선하세요.

다음은 기존 템플릿에 있는 job의 코드 예시입니다.

리팩토링 전 코드 예시. 출처=GitLab | 인포그랩 GitLab
리팩토링 전 코드 예시. 출처=GitLab

아래는 리팩토링 된 컴포넌트 코드입니다.

리팩토링 후 코드 예시. 출처=GitLab | 인포그랩 GitLab
리팩토링 후 코드 예시. 출처=GitLab

컴포넌트가 준비되면 CI/CD 카탈로그에 이를 게시할 수 있습니다. 그러면 다른 사람들이 이 컴포넌트를 찾아 이용할 수 있습니다.

템플릿을 컴포넌트로 변환하는 방법을 더 자세히 알고 싶다면 GitLab CI/CD 컴포넌트 공식 기술 문서를 참조하세요.

고품질 컴포넌트 프로젝트 만들기

앞서 언급했듯 템플릿을 컴포넌트로 변환할 때, 컴포넌트 프로젝트를 미리 만들어야 하는데요. 이때 고품질 컴포넌트 프로젝트를 만드는 모범 관행을 활용하면 좋습니다. GitLab 기술 문서에서 이를 확인할 수 있는데요. 핵심 내용은 아래와 같습니다.

  • 의존성을 관리합니다.
  • 명확한 README.md를 작성합니다.
  • 컴포넌트를 테스트합니다.
  • 글로벌 키워드를 사용하지 않습니다.
  • 하드코딩된 값을 입력으로 대체합니다.
  • 맞춤형 CI/CD 변수를 입력으로 대체합니다.

맺음말

지금까지 CI/CD 컴포넌트 개념과 장점, CI/CD 템플릿을 CI/CD 컴포넌트로 변환하는 방법, 고품질 컴포넌트 프로젝트를 만드는 모범 관행을 알아봤습니다.

이밖에 GitLab 기술 문서를 보면 GitLab Go 템플릿을 CI/CD 컴포넌트로 변환하는 방법을 파악할 수 있고요. 아래 동영상을 보면 GitLab AWS 템플릿을 CI/CD 컴포넌트로 리팩토링하는 방법도 배울 수 있습니다.

여러분도 이러한 콘텐츠를 참조해 GitLab에서 CI/CD 컴포넌트로 파이프라인을 더 편리하게 생성하고, 유지 관리하시면 좋겠습니다.


GitLab AWS 템플릿을 CI/CD 컴포넌트로 리팩토링하는 과정을 다룬 영상. 출처=GitLab

참고 자료

  1. Refactoring a CI/CD template to a CI/CD component
  2. CI/CD components
  3. Talk: Efficient DevSecOps workflows with reusable CI/CD components

인포그랩은 GitLab과 DevOps를 맞춤형으로 기술 지원합니다. GitLab(Omnibus/Cloud Native Hybrid) 구축 지원이 필요하시면 문의하기로 연락해 주십시오.