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 빌드 속도 벤치마킹 프레임워크

GitLab CI의 빌드 속도에 대한 성능을 이해하기 위해, CI 빌드 속도 벤치마킹 프레임워크를 구축하는 계획입니다.

벤치마크

벤치마크를 실행하기 위해, 다음과 같이 진행할 것입니다:

  1. 벤치마킹 도구 설치
  2. 도구 시작
  3. 시나리오 실행
  4. 결과를 GitLab 데이터 웨어하우스에 보고

최초 반복에서는 GitLab CI, GitHub Actions 및 CircleCI의 속도 메트릭에 중점을 둘 것입니다.

원칙

우리가 지켜야 할 몇 가지 설계 원칙이 있습니다:

  1. CI 플랫폼에 무관하게 만듭니다. 모든 지속적 통합 플랫폼에서 실행할 수 있어야 합니다.
  2. 특정 기술에 의존하지 않습니다. 특정 플랫폼에서 사용할 수 없는 기술에 의존하지 않습니다.
  3. 의존성이 적은 쉬운 설치, 많은 의존성이 필요하지 않아야 합니다. 의존성이 없는 것이 이상적일 것입니다.
  4. HTTP 요청을 통해 결과를 GitLab에 다시 보냅니다. 더 나은 방법이 없는 한, 환경에서 실행하는 모든 세부 정보를 읽고 텔레메트리로 전송합니다.

벤치마킹: 클라이언트 측

벤치마킹 도구는 CI 빌드 실행의 모든 단계를 메트릭할 수 있어야 합니다:

  1. 빌드 요청부터 시나리오 실행이 시작되는 시간.
  2. 시나리오 각 단계의 모노토닉 시간.
  3. 각 단계의 스레드 시간을 실행하는 데 필요한 시간.
  4. GitLab에 결과를 보고하는 데 필요한 시간.

이상적으로, 도구는 이러한 데이터를 Open Telemetry Tracing 형식으로 수집할 수 있어야 합니다.

Go 기반 도구

위에 나열된 요구 사항/원칙을 충족시킬 수 있는 솔루션 중 하나는 Go 기반의 이진 파일일 수 있으며, 이는 wget/curl을 사용하거나 다른 편리한 방법으로 다양한 CI 플랫폼에 설치될 수 있습니다. 해당 바이너리를 사용하는 이점은 다음과 같습니다:

  1. 컨테이너를 사용할 필요가 없는 쉬운 설치 방법.
  2. 정적으로 링크된 이진 파일의 외부 의존성이 적습니다.
  3. 추적 또는 HTTP/API 통합을 위한 많은 라이브러리가 있습니다.
  4. 벤치마킹 범위를 넓히는 다중 스레드 실행 모드.
  5. 시나리오 유지보수를 쉽게 만들어주는 표현력 있는 언어.

벤치마킹: 서버 측

파이프라인 스케줄러

벤치마크를 실행하려면 테스트 중인 지속적 통합 플랫폼에서 새로운 빌드/파이프라인/작업이 시작되어야 할 것입니다. 일부 플랫폼은 예약 파이프라인을 지원하지만, 이렇게 하면 빌드 시작 시간을 메트릭하는 것이 어려워질 수 있습니다. 구현 중 고려해야 할 대안은 API 트리거 엔드포인트를 사용하여 파이프라인을 시작하는 것입니다. 대부분의 CI 플랫폼에서 이런 방식으로 파이프라인을 실행할 수 있으며, 시작 시간/파이프라인 생성 요청 시간을 전달하여 벤치마킹 도구에서 사용하고, 빌드 벤치마크 텔레메트리와 함께 데이터 웨어하우스로 전달할 수 있습니다.

데이터 웨어하우스

벤치마킹 텔레메트리를 수신할 서버 측에서는 결과를 시각화할 수 있는 데이터 웨어하우스로 데이터를 전달해야 합니다. Kibana나 Observability/추적 도구와 같이 결과를 시각화할 수 있는 도구가 필요합니다.

이를 실행하기 전에 히스토리컬 항목을 다른 데이터 웨어하우스로 이관해야 할 경우를 대비해 페이로드를 오브젝트 스토리지에 보관하는 것이 좋을 수 있습니다.