Как использовать Bencher в GitLab CI/CD
В зависимости от вашего варианта использования, вы можете настроить Непрерывное Бенчмарк-тестирование в GitLab CI/CD для:
Убедитесь, что вы создали токен API
и задали его как переменную с маской под именем BENCHER_API_TOKEN
перед тем, как продолжить!
Перейдите в Ваш репозиторий -> Настройки -> CI/CD -> Переменные -> Развернуть -> Добавить переменную
.
Ключ переменной должен быть BENCHER_API_TOKEN
, а значение переменной должно быть вашим токеном API.
Отметьте оба поля Защитить переменную
и Скрыть переменную
.
Целевая Ветка
Краеугольный камень Статистического Непрерывного Бенчмаркинга — это наличие исторической базы для вашей целевой ветки. Эта историческая база затем может быть использована для обнаружения ухудшений производительности в Merge Requests.
- Создайте файл 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 run
CLI для полного обзора. (например,bencher run
) - Установите опцию
--project
на слаг проекта. Смотрите документацию--project
для получения подробной информации. (например,--project save-walter-white-1234abcd
) - Установите опцию
--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
)
Запросы на слияние
Чтобы определить регрессию производительности в запросах на слияние, вам нужно запускать ваши тесты производительности на этих запросах. Ниже приведенный пример следует использовать только для веток в рамках того же репозитория.
- Обновите файл 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
, в котором будет выполняться задача. Просмотрите документацию поimage
GitLab CI/CD для полного обзора. (например,image: debian:bullseye
) - Установите Bencher CLI с помощью удобного скрипта.
(например,
before_script: ...
) - Используйте подкоманду
bencher run
CLI для запуска тестов производительности ветки запроса на слияние. Просмотрите подкомандуbencher run
CLI для полного обзора. (например,bencher run
) - Установите опцию
--project
на слаг проекта. Просмотрите документацию по--project
для более подробной информации. (например,--project save-walter-white-1234abcd
) - Установите опцию
--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
.
- Обновите файл 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 save-walter-white-1234abcd
) - Установите опцию
--token
для скрытой переменной окруженияBENCHER_API_TOKEN
. Смотрите документацию по--token
для получения более подробной информации. (например:--token "$BENCHER_API_TOKEN"
) - Установите опцию
--branch
на имя ветки MR с использованием предопределенной переменной в GitLab CI/CD. (например:--branch "$CI_COMMIT_REF_NAME"
)
🐰 Поздравляем! Вы научились использовать Bencher в GitLab CI/CD! 🎉