This page contains information related to upcoming products, features, and functionality. It is important to note that the information presented is for informational purposes only. Please do not rely on this information for purchasing or planning purposes. As with all projects, the items mentioned on this page are subject to change or delay. The development, release, and timing of any products, features, or functionality remain at the sole discretion of GitLab Inc.
Status Authors Coach DRIs Owning Stage Created
ongoing @grzesiek @grzesiek @gabrielengel_gl 2024-01-12

CI/CD Build Speed

요약

GitLab CI는 다양한 작업, 빌드, 파이프라인을 실행하는 데 널리 사용되는 CI(Continuous Integration) 플랫폼입니다. 2015년 9월에 GitLab에 통합되었으며 가장 사랑받는 CI/CD 솔루션 중 하나가 되었습니다.

다년간 GitLab CI 플랫폼에 많은 새로운 기능과 코드를 추가해왔습니다. “가장 사랑받는 솔루션 중 하나”의 지위를 유지하기 위해 빠르고 안정적이며 안전하도록 주의를 기울여야 합니다. 이 설계 문서는 이전과 같은 지위를 유지하기 위해 GitLab CI 빌드 속도를 향상시킴으로써 나아가는 방향을 설명합니다.

목표

  1. GitLab CI를 다른 플랫폼과 비교하는 데 사용되는 CI 속도 벤치마크를 수립합니다.
  2. GitLab CI 속도를 장기간에 걸쳐 측정할 수 있는 CI 벤치마크 프레임워크를 구축합니다.
  3. GitLab CI 빌드 속도를 향상시키기 위한 다음 단계를 설명합니다.

제안

CI 속도 벤치마크

먼저, 여러 CI/CD 플랫폼에서 특정 시나리오를 실행하고 결과를 데이터 웨어하우스에 수집할 수 있는 CI 속도 벤치마크 솔루션을 구축할 계획입니다.

이를 통해 다양한 시나리오에 대한 CI 빌드 속도의 기준을 정의하고, 시간이 흐름에 따라 우리와 다른 제공 업체가 이루는 진전을 추적할 수 있게 될 것입니다.

이러한 목표의 핵심은 빌드 속도에 대한 대리 메트릭을 정의하는 것입니다. 예를 들어, 다음과 같은 시나리오를 실행할 수 있을 것입니다:

  1. echo "Hello World" 빌드의 빌드 로그의 첫 번째 바이트까지 걸리는 시간.
  2. CPU 집약적인 암호화 작업 수행 결과까지 걸리는 시간.
  3. 주어진 양의 바이트에 대한 메모리 집약적인 작업 수행 결과까지 걸리는 시간.
  4. 리눅스 커널을 빌드하는 데 걸리는 시간.

시나리오는 멱등하고 결정론적이어야 합니다.

첫 번째 반복에서는 총 작업 실행 시간에만 주력하고, 구체적인 시작 시간 비교 등에는 들어가지 않을 것입니다.

CI 벤치마크 프레임워크

구현하고자 하는 시나리오를 정의한 후, CI 벤치마크 프레임워크를 구축해야 합니다. 이 프레임워크는 CI 환경에서 시나리오를 실행하고 결과를 데이터 웨어하우스로 보내 분석하고 비교하는 데 사용됩니다.

프레임워크의 설계 선택에 대한 주요 원칙은 다음과 같습니다:

  1. CI 플랫폼과 독립적이어야 합니다. 모든 CI 플랫폼에서 실행할 수 있어야 합니다.
  2. 일부 플랫폼에서 사용할 수 없는 특정 기술에 의존해서는 안 됩니다.
  3. 설치 설정이 쉬워 많은 종속성이 필요하지 않아야 합니다. 종속성이 없는 것이 이상적일 것입니다.
  4. 결과를 GitLab으로 HTTP 요청을 통해 보내야 하는 경우를 제외하고는, 더 나은 방법이 없는 한 결과를 GitLab으로 보내야 합니다.

CI 빌드 속도 향상

CI 빌드 속도를 측정할 수 있게 되면, 이를 향상시킬 수 있을 것입니다. 초기 결과를 보유한 후에 속도를 향상시키기 위한 다음 단계를 정의할 것입니다.