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 variableMask variable 상자 모두를 체크하세요.

타겟 브랜치

통계적 지속 벤치마킹의 핵심 요소는 타겟 브랜치에 대한 역사적인 기준선을 가지는 것입니다. 이 역사적인 기준선은 병합 요청에서 성능 퇴보를 감지하는 데 사용될 수 있습니다.

.gitlab-ci.yml
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 save-walter-white-1234abcd \
--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
  1. GitLab CI/CD 파일을 생성합니다. (예: .gitlab-ci.yml)
  2. GitLab CI/CD 작업을 생성합니다. (예: benchmark_target_branch)
  3. 파이프라인이 main 브랜치로의 push에 의해 트리거된 경우에 실행하십시오. 전체 개요는 GitLab CI/CD rules 문서GitLab CI/CD 사전 정의 변수 문서를 참조하십시오. (예: rules: if: ...)
  4. 작업이 실행될 image를 설정합니다. 전체 개요는 GitLab CI/CD image 문서를 참조하십시오. (예: image: debian:bullseye)
  5. 편리한 스크립트를 사용하여 Bencher CLI를 설치합니다. (예: before_script: ...)
  6. bencher run CLI 서브커맨드를 사용하여 main 브랜치 벤치마크를 실행합니다. 전체 개요는 bencher run CLI 서브커맨드를 참조하십시오. (예: bencher run)
  7. --project 옵션을 프로젝트 슬러그에 설정합니다. 자세한 내용은 --project 문서를 참조하십시오. (예: --project save-walter-white-1234abcd)
  8. --token 옵션을 마스킹된 BENCHER_API_TOKEN 환경 변수에 설정합니다. 자세한 내용은 --token 문서를 참조하십시오. (예: --token "$BENCHER_API_TOKEN")
  9. --branch 옵션을 브랜치 이름으로 설정합니다. 전체 개요는 --branch 문서를 참조하십시오. (예: --branch main)
  10. --testbed 옵션을 테스트베드 이름에 설정합니다. 이는 image에서 선택된 기계와 일치해야 합니다. 자세한 내용은 --testbed 문서를 참조하십시오. (예: --testbed debian:bullseye)
  11. main 브랜치, debian:bullseye 테스트베드, 및 latency 측정을 위한 임계값 설정:
    1. --threshold-measure 옵션을 bencher mock에 의해 생성된 내장 latency 측정 값으로 설정합니다. 자세한 내용은 --threshold-measure 문서를 참조하십시오. (예: --threshold-measure latency)
    2. --threshold-test 옵션을 Student’s t-test (t_test)로 설정합니다. 전체 개요는 --threshold-test 문서를 참조하십시오. (예: --threshold-test t_test)
    3. --threshold-max-sample-size 옵션을 최대 샘플 크기 64로 설정합니다. 자세한 내용은 --threshold-max-sample-size 문서를 참조하십시오. (예: --threshold-max-sample-size 64)
    4. --threshold-upper-boundary 옵션을 상한 0.99로 설정합니다. 자세한 내용은 --threshold-upper-boundary 문서를 참조하십시오. (예: --threshold-upper-boundary 0.99)
    5. --thresholds-reset 플래그를 설정하여 지정된 임계값만 활성화되도록 합니다. 전체 개요는 --thresholds-reset 문서를 참조하십시오. (예: --thresholds-reset)
  12. 경고가 생성될 경우 명령이 실패하도록 --err 플래그를 설정합니다. 전체 개요는 --err 문서를 참조하십시오. (예: --err)
  13. Bencher Metric Format JSON (json)bencher mock에 의해 생성된 것으로 --adapter 옵션을 설정합니다. 전체 개요는 벤치마크 하네스 어댑터를 참조하십시오. (예: --adapter json)
  14. 벤치마크 명령 인수를 지정합니다. 전체 개요는 벤치마크 명령를 참조하십시오. (예: bencher mock)

Merge Requests

Merge Requests에서 성능 회귀 문제를 잡기 위해서는, MRs에서 벤치마크를 실행해야 합니다. 아래 예제는 같은 저장소 내의 브랜치에만 사용해야 합니다.

.gitlab-ci.yml
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 save-walter-white-1234abcd \
--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
  1. GitLab CI/CD 파일 업데이트. (예: .gitlab-ci.yml)
  2. GitLab CI/CD 작업 생성. (예: benchmark_mr_branch)
  3. 파이프라인이 merge_request_event에 의해 트리거될 경우 실행. 전체 개요는 GitLab CI/CD rules 문서GitLab CI/CD 사전 정의 변수 문서를 참조하세요. (예: rules: if: ...)
  4. 작업이 실행될 image 설정. 전체 개요는 GitLab CI/CD image 문서를 참조하세요. (예: image: debian:bullseye)
  5. 편리한 스크립트를 사용하여 Bencher CLI 설치. (예: before_script: ...)
  6. bencher run CLI 하위 명령어를 사용하여 병합 요청 브랜치 벤치마크를 실행합니다. 전체 개요는 bencher run CLI 하위 명령어를 참조하세요. (예: bencher run)
  7. 프로젝트 슬러그에 --project 옵션 설정. 자세한 내용은 --project 문서를 참조하세요. (예: --project save-walter-white-1234abcd)
  8. 마스크된 BENCHER_API_TOKEN 환경 변수에 --token 옵션 설정. 자세한 내용은 --token 문서를 참조하세요. (예: --token "$BENCHER_API_TOKEN")
  9. GitLab CI/CD 사전 정의 변수를 사용하여 MR 브랜치 이름에 --branch 옵션 설정. 전체 개요는 --branch 문서를 참조하세요. (예: --branch "$CI_COMMIT_REF_NAME")
  10. MR 브랜치의 시작 포인트 설정:
    1. GitLab CI/CD 사전 정의 변수를 사용하여 MR 브랜치 시작 포인트에 --start-point 옵션 설정. 전체 개요는 --start-point 문서를 참조하세요. (예: --start-point "$CI_MERGE_REQUEST_TARGET_BRANCH_NAME")
    2. GitLab CI/CD 사전 정의 변수를 사용하여 MR 브랜치의 시작 포인트 git 해시에 --start-point-hash 옵션 설정. 전체 개요는 --start-point-hash 문서를 참조하세요. (예: --start-point-hash "$CI_MERGE_REQUEST_TARGET_BRANCH_SHA")
    3. 시작 지점에서 임계값을 복사하도록 --start-point-clone-thresholds 플래그 설정. 전체 개요는 --start-point-clone-thresholds 문서를 참조하세요. (예: --start-point-clone-thresholds)
    4. 항상 MR 브랜치를 시작 포인트로 재설정하도록 --start-point-reset 플래그 설정. 이는 벤치마크 데이터 드리프트를 방지합니다. 전체 개요는 --start-point-reset 문서를 참조하세요. (예: --start-point-reset)
  11. 테스트베드 이름에 --testbed 옵션 설정. 이는 image에서 선택한 머신과 일치해야 할 것입니다. 자세한 내용은 --tested 문서를 참조하세요. (예: --testbed debian:bullseye)
  12. 경고가 생성될 경우 명령을 실패하게 하는 --err 플래그 설정. 전체 개요는 --err 문서를 참조하세요. (예: --err)
  13. bencher mock이 생성한 Bencher Metric Format JSON (json)--adapter 옵션 설정. 전체 개요는 벤치마크 하네스 어댑터를 참조하세요. (예: --adapter json)
  14. 벤치마크 명령 인수 지정. 전체 개요는 벤치마크 명령을 참조하세요. (예: bencher mock)

MR이 닫힌 후 MR 브랜치를 정리하려면, GitLab API를 사용하여 MR 상태를 조회하는 별도의 작업을 생성할 수 있습니다. 상태가 closed인 경우, 이 작업은 bencher archive 명령을 사용하여 MR 브랜치를 아카이브할 것입니다.

.gitlab-ci.yml
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 save-walter-white-1234abcd \
--token "$BENCHER_API_TOKEN" \
--branch "$CI_COMMIT_REF_NAME"
else
echo 'Merge request is not `closed`. Skipping archival.'
fi
  1. GitLab CI/CD 파일을 업데이트합니다. (예: .gitlab-ci.yml)
  2. GitLab CI/CD 작업을 생성합니다. (예: archive_mr_branch)
  3. 파이프라인이 merge_request_event에 의해 트리거될 때 if 실행합니다. 전체 개요는 GitLab CI/CD rules 문서GitLab CI/CD 사전 정의된 변수 문서를 참조하세요. (예: rules: if: ...)
  4. 작업이 실행될 image를 설정합니다. 전체 개요는 GitLab CI/CD image 문서를 참조하세요. (예: image: debian:bullseye)
  5. 편리한 스크립트를 사용하여 Bencher CLI를 설치합니다. (예: before_script: curl ...)
  6. GitLab API를 사용하여 MR 상태를 확인합니다. (예: before_script: MR_STATE=$(...))
  7. MR 상태가 closed인 경우 MR 브랜치를 아카이브하기 위해 bencher archive CLI 하위 명령을 사용합니다. (예: bencher archive)
  8. 프로젝트 슬러그에 --project 옵션을 설정합니다. 자세한 내용은 --project 문서를 참조하세요. (예: --project save-walter-white-1234abcd)
  9. 마스크된 BENCHER_API_TOKEN 환경 변수에 --token 옵션을 설정합니다. 자세한 내용은 --token 문서를 참조하세요. (예: --token "$BENCHER_API_TOKEN")
  10. GitLab CI/CD 사전 정의된 변수를 사용하여 MR 브랜치 이름에 --branch 옵션을 설정합니다. (예: --branch "$CI_COMMIT_REF_NAME")


🐰 축하합니다! GitLab CI/CD에서 Bencher를 사용하는 방법을 배웠습니다! 🎉


계속하기: 벤치마킹 개요 ➡

🤖 이 문서는 OpenAI GPT-4에 의해 자동으로 생성되었습니다. 정확하지 않을 수도 있고 오류가 있을 수도 있습니다. 오류를 발견하면 GitHub에서 문제를 열어주세요.


Published: Fri, October 27, 2023 at 8:40:00 AM UTC | Last Updated: Sat, October 12, 2024 at 8:22:00 PM UTC