GitLab CI/CD에서 Bencher 사용하기
사용 사례에 따라 GitLab CI/CD에서 지속적인 벤치마킹을 설정할 수 있습니다:
계속하기 전에 API 토큰을 생성하고 이를 BENCHER_API_TOKEN이라는 마스크된 변수로 설정해야 합니다! Your Repo -> Settings -> CI/CD -> Variables -> Expand -> Add variable로 이동하세요. 변수 키는 BENCHER_API_TOKEN이어야 하고, 변수 값은 귀하의 API 토큰이어야 합니다. Protect variable 및 Mask variable 상자 모두를 체크하세요.
타겟 브랜치
통계적 지속 벤치마킹의 핵심 요소는 타겟 브랜치에 대한 역사적인 기준선을 가지는 것입니다. 이 역사적인 기준선은 병합 요청에서 성능 퇴보를 감지하는 데 사용될 수 있습니다.
benchmark_target_branch: rules: - if: $CI_COMMIT_BRANCH == "main" && $CI_PIPELINE_SOURCE == "push" when: always image: debian:bullseye before_script: - curl --proto '=https' --tlsv1.2 -sSfL https://bencher.dev/download/install-cli.sh | sh script: - | bencher run \ --project project-abc4567-wxyz123456789 \ --token "$BENCHER_API_TOKEN" \ --branch main \ --testbed debian:bullseye \ --threshold-measure latency \ --threshold-test t_test \ --threshold-max-sample-size 64 \ --threshold-upper-boundary 0.99 \ --thresholds-reset \ --err \ --adapter json \ bencher mock- GitLab CI/CD 파일을 생성합니다.
(예:
.gitlab-ci.yml) - GitLab CI/CD 작업을 생성합니다.
(예:
benchmark_target_branch) - 파이프라인이
main브랜치로의push에 의해 트리거된 경우에 실행하십시오. 전체 개요는 GitLab CI/CDrules문서 및 GitLab CI/CD 사전 정의 변수 문서를 참조하십시오. (예:rules: if: ...) - 작업이 실행될
image를 설정합니다. 전체 개요는 GitLab CI/CDimage문서를 참조하십시오. (예:image: debian:bullseye) - 편리한 스크립트를 사용하여 Bencher CLI를 설치합니다.
(예:
before_script: ...) bencher runCLI 서브커맨드를 사용하여main브랜치 벤치마크를 실행합니다. 전체 개요는bencher runCLI 서브커맨드를 참조하십시오. (예:bencher run)--project옵션을 프로젝트 슬러그에 설정합니다. 자세한 내용은--project문서를 참조하십시오. (예:--project project-abc4567-wxyz123456789)--token옵션을 마스킹된BENCHER_API_TOKEN환경 변수에 설정합니다. 자세한 내용은--token문서를 참조하십시오. (예:--token "$BENCHER_API_TOKEN")--branch옵션을 브랜치 이름으로 설정합니다. 전체 개요는--branch문서를 참조하십시오. (예:--branch main)--testbed옵션을 테스트베드 이름에 설정합니다. 이는image에서 선택된 기계와 일치해야 합니다. 자세한 내용은--testbed문서를 참조하십시오. (예:--testbed debian:bullseye)main브랜치,debian:bullseye테스트베드, 및latency측정을 위한 임계값 설정:--threshold-measure옵션을bencher mock에 의해 생성된 내장latency측정 값으로 설정합니다. 자세한 내용은--threshold-measure문서를 참조하십시오. (예:--threshold-measure latency)--threshold-test옵션을 Student’s t-test (t_test)로 설정합니다. 전체 개요는--threshold-test문서를 참조하십시오. (예:--threshold-test t_test)--threshold-max-sample-size옵션을 최대 샘플 크기64로 설정합니다. 자세한 내용은--threshold-max-sample-size문서를 참조하십시오. (예:--threshold-max-sample-size 64)--threshold-upper-boundary옵션을 상한0.99로 설정합니다. 자세한 내용은--threshold-upper-boundary문서를 참조하십시오. (예:--threshold-upper-boundary 0.99)--thresholds-reset플래그를 설정하여 지정된 임계값만 활성화되도록 합니다. 전체 개요는--thresholds-reset문서를 참조하십시오. (예:--thresholds-reset)
- 경고가 생성될 경우 명령이 실패하도록
--err플래그를 설정합니다. 전체 개요는--err문서를 참조하십시오. (예:--err) - Bencher Metric Format JSON (
json)이bencher mock에 의해 생성된 것으로--adapter옵션을 설정합니다. 전체 개요는 벤치마크 하네스 어댑터를 참조하십시오. (예:--adapter json) - 벤치마크 명령 인수를 지정합니다.
전체 개요는 벤치마크 명령를 참조하십시오.
(예:
bencher mock)
Merge Requests
Merge Requests에서 성능 회귀 문제를 잡기 위해서는, MRs에서 벤치마크를 실행해야 합니다. 아래 예제는 같은 저장소 내의 브랜치에만 사용해야 합니다.
benchmark_mr_branch: rules: - if: $CI_PIPELINE_SOURCE == "merge_request_event" when: always image: debian:bullseye before_script: - curl --proto '=https' --tlsv1.2 -sSfL https://bencher.dev/download/install-cli.sh | sh script: - | bencher run \ --project project-abc4567-wxyz123456789 \ --token "$BENCHER_API_TOKEN" \ --branch "$CI_COMMIT_REF_NAME" \ --start-point "$CI_MERGE_REQUEST_TARGET_BRANCH_NAME" \ --start-point-hash "$CI_MERGE_REQUEST_TARGET_BRANCH_SHA" \ --start-point-clone-thresholds \ --start-point-reset \ --testbed debian:bullseye \ --err \ --adapter json \ bencher mock- GitLab CI/CD 파일 업데이트.
(예:
.gitlab-ci.yml) - GitLab CI/CD 작업 생성.
(예:
benchmark_mr_branch) - 파이프라인이
merge_request_event에 의해 트리거될 경우 실행. 전체 개요는 GitLab CI/CDrules문서와 GitLab CI/CD 사전 정의 변수 문서를 참조하세요. (예:rules: if: ...) - 작업이 실행될
image설정. 전체 개요는 GitLab CI/CDimage문서를 참조하세요. (예:image: debian:bullseye) - 편리한 스크립트를 사용하여 Bencher CLI 설치.
(예:
before_script: ...) bencher runCLI 하위 명령어를 사용하여 병합 요청 브랜치 벤치마크를 실행합니다. 전체 개요는bencher runCLI 하위 명령어를 참조하세요. (예:bencher run)- 프로젝트 슬러그에
--project옵션 설정. 자세한 내용은--project문서를 참조하세요. (예:--project project-abc4567-wxyz123456789) - 마스크된
BENCHER_API_TOKEN환경 변수에--token옵션 설정. 자세한 내용은--token문서를 참조하세요. (예:--token "$BENCHER_API_TOKEN") - GitLab CI/CD 사전 정의 변수를 사용하여 MR 브랜치 이름에
--branch옵션 설정. 전체 개요는--branch문서를 참조하세요. (예:--branch "$CI_COMMIT_REF_NAME") - MR 브랜치의 시작 포인트 설정:
- GitLab CI/CD 사전 정의 변수를 사용하여 MR 브랜치 시작 포인트에
--start-point옵션 설정. 전체 개요는--start-point문서를 참조하세요. (예:--start-point "$CI_MERGE_REQUEST_TARGET_BRANCH_NAME") - GitLab CI/CD 사전 정의 변수를 사용하여 MR 브랜치의 시작 포인트
git해시에--start-point-hash옵션 설정. 전체 개요는--start-point-hash문서를 참조하세요. (예:--start-point-hash "$CI_MERGE_REQUEST_TARGET_BRANCH_SHA") - 시작 지점에서 임계값을 복사하도록
--start-point-clone-thresholds플래그 설정. 전체 개요는--start-point-clone-thresholds문서를 참조하세요. (예:--start-point-clone-thresholds) - 항상 MR 브랜치를 시작 포인트로 재설정하도록
--start-point-reset플래그 설정. 이는 벤치마크 데이터 드리프트를 방지합니다. 전체 개요는--start-point-reset문서를 참조하세요. (예:--start-point-reset)
- GitLab CI/CD 사전 정의 변수를 사용하여 MR 브랜치 시작 포인트에
- 테스트베드 이름에
--testbed옵션 설정. 이는image에서 선택한 머신과 일치해야 할 것입니다. 자세한 내용은--tested문서를 참조하세요. (예:--testbed debian:bullseye) - 경고가 생성될 경우 명령을 실패하게 하는
--err플래그 설정. 전체 개요는--err문서를 참조하세요. (예:--err) bencher mock이 생성한 Bencher Metric Format JSON (json)에--adapter옵션 설정. 전체 개요는 벤치마크 하네스 어댑터를 참조하세요. (예:--adapter json)- 벤치마크 명령 인수 지정.
전체 개요는 벤치마크 명령을 참조하세요.
(예:
bencher mock)
MR이 닫힌 후 MR 브랜치를 정리하려면,
GitLab API를 사용하여 MR 상태를 조회하는 별도의 작업을 생성할 수 있습니다.
상태가 closed인 경우, 이 작업은 bencher archive 명령을 사용하여 MR 브랜치를 아카이브할 것입니다.
archive_mr_branch: rules: - if: $CI_PIPELINE_SOURCE == "merge_request_event" when: always image: debian:bullseye before_script: - curl --proto '=https' --tlsv1.2 -sSfL https://bencher.dev/download/install-cli.sh | sh - | MR_STATE=$(curl --header "PRIVATE-TOKEN: $CI_JOB_TOKEN" "https://gitlab.com/api/v4/projects/$CI_PROJECT_ID/merge_requests/$CI_MERGE_REQUEST_IID" | jq -r .state) echo "Merge request state: $MR_STATE" script: - | if [ "$MR_STATE" = "closed" ]; then bencher archive \ --project project-abc4567-wxyz123456789 \ --token "$BENCHER_API_TOKEN" \ --branch "$CI_COMMIT_REF_NAME" else echo 'Merge request is not `closed`. Skipping archival.' fi- GitLab CI/CD 파일을 업데이트합니다.
(예:
.gitlab-ci.yml) - GitLab CI/CD 작업을 생성합니다.
(예:
archive_mr_branch) - 파이프라인이
merge_request_event에 의해 트리거될 때if실행합니다. 전체 개요는 GitLab CI/CDrules문서와 GitLab CI/CD 사전 정의된 변수 문서를 참조하세요. (예:rules: if: ...) - 작업이 실행될
image를 설정합니다. 전체 개요는 GitLab CI/CDimage문서를 참조하세요. (예:image: debian:bullseye) - 편리한 스크립트를 사용하여 Bencher CLI를 설치합니다.
(예:
before_script: curl ...) - GitLab API를 사용하여 MR 상태를 확인합니다.
(예:
before_script: MR_STATE=$(...)) - MR 상태가
closed인 경우 MR 브랜치를 아카이브하기 위해bencher archiveCLI 하위 명령을 사용합니다. (예:bencher archive) - 프로젝트 슬러그에
--project옵션을 설정합니다. 자세한 내용은--project문서를 참조하세요. (예:--project project-abc4567-wxyz123456789) - 마스크된
BENCHER_API_TOKEN환경 변수에--token옵션을 설정합니다. 자세한 내용은--token문서를 참조하세요. (예:--token "$BENCHER_API_TOKEN") - GitLab CI/CD 사전 정의된 변수를 사용하여 MR 브랜치 이름에
--branch옵션을 설정합니다. (예:--branch "$CI_COMMIT_REF_NAME")
🐰 축하합니다! GitLab CI/CD에서 Bencher를 사용하는 방법을 배웠습니다! 🎉