Status | Authors | Coach | DRIs | Owning Stage | Created |
---|---|---|---|---|---|
ongoing |
@grzesiek
|
@grzesiek
|
@gabrielengel_gl
| 2024-01-12 |
CI 빌드 속도 벤치마킹 프레임워크
GitLab CI의 빌드 속도에 대한 성능을 이해하기 위해, CI 빌드 속도 벤치마킹 프레임워크를 구축하는 계획입니다.
벤치마크
벤치마크를 실행하기 위해, 다음과 같이 진행할 것입니다:
- 벤치마킹 도구 설치
- 도구 시작
- 시나리오 실행
- 결과를 GitLab 데이터 웨어하우스에 보고
최초 반복에서는 GitLab CI, GitHub Actions 및 CircleCI의 속도 메트릭에 중점을 둘 것입니다.
원칙
우리가 지켜야 할 몇 가지 설계 원칙이 있습니다:
- CI 플랫폼에 무관하게 만듭니다. 모든 지속적 통합 플랫폼에서 실행할 수 있어야 합니다.
- 특정 기술에 의존하지 않습니다. 특정 플랫폼에서 사용할 수 없는 기술에 의존하지 않습니다.
- 의존성이 적은 쉬운 설치, 많은 의존성이 필요하지 않아야 합니다. 의존성이 없는 것이 이상적일 것입니다.
- HTTP 요청을 통해 결과를 GitLab에 다시 보냅니다. 더 나은 방법이 없는 한, 환경에서 실행하는 모든 세부 정보를 읽고 텔레메트리로 전송합니다.
벤치마킹: 클라이언트 측
벤치마킹 도구는 CI 빌드 실행의 모든 단계를 메트릭할 수 있어야 합니다:
- 빌드 요청부터 시나리오 실행이 시작되는 시간.
- 시나리오 각 단계의 모노토닉 시간.
- 각 단계의 스레드 시간을 실행하는 데 필요한 시간.
- GitLab에 결과를 보고하는 데 필요한 시간.
이상적으로, 도구는 이러한 데이터를 Open Telemetry Tracing 형식으로 수집할 수 있어야 합니다.
Go 기반 도구
위에 나열된 요구 사항/원칙을 충족시킬 수 있는 솔루션 중 하나는 Go 기반의 이진 파일일 수 있으며, 이는 wget
/curl
을 사용하거나 다른 편리한 방법으로 다양한 CI 플랫폼에 설치될 수 있습니다. 해당 바이너리를 사용하는 이점은 다음과 같습니다:
- 컨테이너를 사용할 필요가 없는 쉬운 설치 방법.
- 정적으로 링크된 이진 파일의 외부 의존성이 적습니다.
- 추적 또는 HTTP/API 통합을 위한 많은 라이브러리가 있습니다.
- 벤치마킹 범위를 넓히는 다중 스레드 실행 모드.
- 시나리오 유지보수를 쉽게 만들어주는 표현력 있는 언어.
벤치마킹: 서버 측
파이프라인 스케줄러
벤치마크를 실행하려면 테스트 중인 지속적 통합 플랫폼에서 새로운 빌드/파이프라인/작업이 시작되어야 할 것입니다. 일부 플랫폼은 예약 파이프라인을 지원하지만, 이렇게 하면 빌드 시작 시간을 메트릭하는 것이 어려워질 수 있습니다. 구현 중 고려해야 할 대안은 API 트리거 엔드포인트를 사용하여 파이프라인을 시작하는 것입니다. 대부분의 CI 플랫폼에서 이런 방식으로 파이프라인을 실행할 수 있으며, 시작 시간/파이프라인 생성 요청 시간을 전달하여 벤치마킹 도구에서 사용하고, 빌드 벤치마크 텔레메트리와 함께 데이터 웨어하우스로 전달할 수 있습니다.
데이터 웨어하우스
벤치마킹 텔레메트리를 수신할 서버 측에서는 결과를 시각화할 수 있는 데이터 웨어하우스로 데이터를 전달해야 합니다. Kibana나 Observability/추적 도구와 같이 결과를 시각화할 수 있는 도구가 필요합니다.
이를 실행하기 전에 히스토리컬 항목을 다른 데이터 웨어하우스로 이관해야 할 경우를 대비해 페이로드를 오브젝트 스토리지에 보관하는 것이 좋을 수 있습니다.