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. The development, release, and timing of any products, features, or functionality may be subject to change or delay and 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 빌드 속도

요약

GitLab CI는 다양한 작업, 빌드, 및 파이프라인을 실행하는 데 널리 사용되는 지속적 통합 플랫폼입니다. 2015년 9월 GitLab에 통합되어 그 이후로 가장 사랑받는 CI/CD 솔루션 중 하나가 되었습니다.

우리는 몇 년 동안 GitLab CI 플랫폼에 다양한 새로운 기능과 코드를 추가해왔습니다. “가장 사랑받는 솔루션 중 하나”의 지위를 유지하기 위해 이를 빠르고 안정적이며 안전하게 만드는 데 신경써야 합니다. 본 설계 문서는 전자를 위한 길을 설명하며, 즉 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. Linux 커널 빌드 결과까지 걸리는 시간.

이러한 시나리오들은 멱등하고 결정론적이어야 합니다.

첫 번째 반복에서는 전체 작업 실행 시간에만 초점을 맞추고, 특정 시작 시간을 비교하는 등의 세부 사항에는 들어가지 않을 것입니다.

CI 벤치마크 프레임워크

우리가 구현하고 싶은 시나리오를 정의한 다음, CI 벤치마크 프레임워크를 구축해야 합니다. 이 프레임워크는 지속적 통합 환경에서 시나리오를 실행하고 결과를 분석 및 비교하기 위해 데이터 웨어하우스로 전송될 것입니다.

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

  1. CI 플랫폼에 독립적이어야 합니다. 어떤 지속적 통합 플랫폼에서도 실행할 수 있어야 합니다.
  2. 특정 기술에 의존하지 않아야 합니다. 어떤 플랫폼에서는 사용할 수 없을 수도 있는 기술에 의존하면 안 됩니다.
  3. 설치 구성을 쉽게하며, 많은 의존성이 필요하지 않아야 합니다. 의존성이 전혀 없는 것이 이상적일 것입니다.
  4. HTTP 요청을 통해 결과를 GitLab로 보내도록 합니다. 더 나은 방법이 없는 한

CI 빌드 속도 향상

CI 빌드 속도를 메트릭할 수 있게 되면 그를 향상시킬 수 있을 것입니다. 초기 결과가 나오면 속도를 향상시키기 위한 다음 단계를 정의할 것입니다.