Как использовать Bencher в GitLab CI/CD
В зависимости от вашего варианта использования, вы можете настроить Непрерывное Бенчмарк-тестирование в GitLab CI/CD для:
Убедитесь, что вы создали токен API
и задали его как переменную с маской под именем BENCHER_API_TOKEN перед тем, как продолжить!
Перейдите в Ваш репозиторий -> Настройки -> CI/CD -> Переменные -> Развернуть -> Добавить переменную.
Ключ переменной должен быть BENCHER_API_TOKEN, а значение переменной должно быть вашим токеном API.
Отметьте оба поля Защитить переменную и Скрыть переменную.
Целевая Ветка
Краеугольный камень Статистического Непрерывного Бенчмаркинга — это наличие исторической базы для вашей целевой ветки. Эта историческая база затем может быть использована для обнаружения ухудшений производительности в Merge Requests.
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) - Запускайте
if, если конвейер был вызванpushвmainветку. Ознакомьтесь с документацией GitLab CI/CDrulesи предопределённые переменные GitLab CI/CD для полного обзора. (например,rules: if: ...) - Установите
image, в котором будет выполнена задача. Ознакомьтесь с документацией GitLab CI/CDimageдля полного обзора. (например,image: debian:bullseye) - Установите Bencher CLI с помощью скрипта установки.
(например,
before_script: ...) - Используйте подкоманду CLI
bencher run, чтобы запустить бенчмарки вашей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на встроенную метрикуlatency, сгенерированнуюbencher mock. Смотрите документацию--threshold-measureдля получения подробной информации. (например,--threshold-measure latency) - Установите опцию
--threshold-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) - Установите опцию
--adapterна Bencher Metric Format JSON (json), который генерируетсяbencher mock. Смотрите адаптеры тестового стенда для полного обзора. (например,--adapter json) - Укажите аргументы команды бенчмарка.
Смотрите документацию команды бенчмарк для полного обзора.
(например,
bencher mock)
Запросы на слияние
Чтобы определить регрессию производительности в запросах на слияние, вам нужно запускать ваши тесты производительности на этих запросах. Ниже приведенный пример следует использовать только для веток в рамках того же репозитория.
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) - Выполните
if, если конвейер был запущен событиемmerge_request_event. Просмотрите документацию по правилам GitLab CI/CD и документацию по предопределенным переменным GitLab CI/CD для полного обзора. (например,rules: if: ...) - Установите
image, в котором будет выполняться задача. Просмотрите документацию поimageGitLab CI/CD для полного обзора. (например,image: debian:bullseye) - Установите Bencher CLI с помощью удобного скрипта.
(например,
before_script: ...) - Используйте подкоманду
bencher runCLI для запуска тестов производительности ветки запроса на слияние. Просмотрите подкомандуbencher runCLI для полного обзора. (например,bencher run) - Установите опцию
--projectна слаг проекта. Просмотрите документацию по--projectдля более подробной информации. (например,--project project-abc4567-wxyz123456789) - Установите опцию
--tokenна замаскированную переменную средыBENCHER_API_TOKEN. Просмотрите документацию по--tokenдля более подробной информации. (например,--token "$BENCHER_API_TOKEN") - Установите опцию
--branchна имя ветки запроса на слияние, используя предопределенную переменную GitLab CI/CD. Просмотрите документацию по--branchдля полного обзора. (например,--branch "$CI_COMMIT_REF_NAME") - Установите начальную точку для ветки запроса на слияние:
- Установите опцию
--start-pointна начальную точку ветки запроса на слияние, используя предопределенную переменную GitLab CI/CD. Просмотрите документацию по--start-pointдля полного обзора. (например,--start-point "$CI_MERGE_REQUEST_TARGET_BRANCH_NAME") - Установите опцию
--start-point-hashна hash начальной точки ветки запроса на слияниеgit, используя предопределенную переменную GitLab CI/CD. Просмотрите документацию по--start-point-hashдля полного обзора. (например,--start-point-hash "$CI_MERGE_REQUEST_TARGET_BRANCH_SHA") - Установите флаг
--start-point-clone-thresholdsдля клонирования порогов из начальной точки. Просмотрите документацию по--start-point-clone-thresholdsдля полного обзора. (например,--start-point-clone-thresholds) - Установите флаг
--start-point-resetдля постоянного сброса ветки запроса на слияние на начальную точку. Это предотвратит искажение данных тестов производительности. Просмотрите документацию по--start-point-resetдля полного обзора. (например,--start-point-reset)
- Установите опцию
- Установите опцию
--testbedна имя тестовой среды. Это должно вероятно соответствовать выбранной машине вimage. Просмотрите документацию по--testbedдля более подробной информации. (например,--testbed debian:bullseye) - Установите флаг
--errдля вызова ошибки команды, если будет сгенерировано предупреждение. Просмотрите документацию по--errдля полного обзора. (например,--err) - Установите опцию
--adapterна формат метрик Bencher JSON (json), который генерируетсяbencher mock. Просмотрите адаптеры тестировочных каркасов для полного обзора. (например,--adapter json) - Укажите аргументы команды бенчмаркинга.
Просмотрите команду бенчмаркинга для полного обзора.
(например,
bencher mock)
Чтобы очистить ветку MR после закрытия его MR,
вы можете создать отдельную задачу, которая будет запрашивать состояние MR с помощью API GitLab.
Если состояние closed, эта задача заархивирует ветку MR с помощью команды bencher archive.
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) - Выполните
if, если конвейер был вызван событиемmerge_request_event. Смотрите документацию поrulesв GitLab CI/CD и документацию по предопределенным переменным в GitLab CI/CD для полного обзора. (например:rules: if: ...) - Установите
image, в котором будет выполняться задача. Смотрите документацию поimageв GitLab CI/CD для полного обзора. (например:image: debian:bullseye) - Установите Bencher CLI, используя удобный скрипт.
(например:
before_script: curl ...) - Проверьте состояние MR, используя API GitLab.
(например:
before_script: MR_STATE=$(...)) - Используйте подкоманду CLI
bencher archiveдля архивирования ветки MR, если состояние MRclosed. (например:bencher archive) - Установите опцию
--projectдля идентификатора проекта. Смотрите документацию по--projectдля получения более подробной информации. (например:--project project-abc4567-wxyz123456789) - Установите опцию
--tokenдля скрытой переменной окруженияBENCHER_API_TOKEN. Смотрите документацию по--tokenдля получения более подробной информации. (например:--token "$BENCHER_API_TOKEN") - Установите опцию
--branchна имя ветки MR с использованием предопределенной переменной в GitLab CI/CD. (например:--branch "$CI_COMMIT_REF_NAME")
🐰 Поздравляем! Вы научились использовать Bencher в GitLab CI/CD! 🎉