Cómo usar Bencher en GitLab CI/CD
Depending on your use case, you can set up Continuous Benchmarking in GitLab CI/CD for your:
Make sure you have created an API token
and set it as a masked variable named BENCHER_API_TOKEN before continuing on!
Navigate to Your Repo -> Settings -> CI/CD -> Variables -> Expand -> Add variable.
The variable key should be BENCHER_API_TOKEN and the variable value should be your API token.
Check both the Protect variable and Mask variable boxes.
Rama Objetivo
Una piedra angular de Benchmarking Continuo Estadístico es tener una línea base histórica para su rama objetivo. Esta línea base histórica puede utilizarse para detectar regresiones de rendimiento en Solicitudes de Fusión.
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- Cree un archivo de CI/CD de GitLab.
(ej:
.gitlab-ci.yml) - Cree un trabajo de CI/CD de GitLab.
(ej:
benchmark_target_branch) - Ejecute
ifel pipeline fue disparado por unpusha la ramamain. Vea la documentación derulesde CI/CD de GitLab y la documentación de variables predefinidas de CI/CD de GitLab para una visión completa. (ej:rules: if: ...) - Configure la
imageen la que se ejecutará el trabajo. Vea la documentación deimagede CI/CD de GitLab para una visión completa. (ej:image: debian:bullseye) - Instale la CLI de Bencher usando el script de conveniencia.
(ej:
before_script: ...) - Use el subcomando de CLI
bencher runpara ejecutar sus benchmarks de la ramamain. Vea el subcomandobencher runde la CLI para una visión completa. (ej:bencher run) - Configure la opción
--projectal slug del proyecto. Vea los documentos de--projectpara más detalles. (ej:--project project-abc4567-wxyz123456789) - Configure la opción
--tokena la variable de entorno enmascaradaBENCHER_API_TOKEN. Vea los documentos de--tokenpara más detalles. (ej:--token "$BENCHER_API_TOKEN") - Configure la opción
--branchal nombre de la rama. Vea los documentos de--branchpara una visión completa. (ej:--branch main) - Configure la opción
--testbedal nombre del Testbed. Esto probablemente deba coincidir con la máquina seleccionada enimage. Vea los documentos de--testbedpara más detalles. (ej:--testbed debian:bullseye) - Configure el Umbral para la rama
main, el Testbeddebian:bullseyey la Medidalatency:- Configure la opción
--threshold-measurea la Medidalatencyincorporada que se genera porbencher mock. Vea los documentos--threshold-measurepara más detalles. (ej:--threshold-measure latency) - Configure la opción
--threshold-testa una prueba t de Student (t_test). Vea los documentos de--threshold-testpara una visión completa. (ej:--threshold-test t_test) - Configure la opción
--threshold-max-sample-sizeal tamaño de muestra máximo de64. Vea los documentos de--threshold-max-sample-sizepara más detalles. (ej:--threshold-max-sample-size 64) - Configure la opción
--threshold-upper-boundaryal Límite Superior de0.99. Vea los documentos de--threshold-upper-boundarypara más detalles. (ej:--threshold-upper-boundary 0.99) - Configure la bandera
--thresholds-resetpara que solo el Umbral especificado esté activo. Vea los documentos de--thresholds-resetpara una visión completa. (ej:--thresholds-reset)
- Configure la opción
- Configure la bandera
--errpara que el comando falle si se genera una Alerta. Vea los documentos de--errpara una visión completa. (ej:--err) - Configure la opción
--adaptera Bencher Metric Format JSON (json) que se genera porbencher mock. Vea adaptadores de benchmark harness para una visión completa. (ej:--adapter json) - Especifique los argumentos del comando de benchmark.
Vea comando de benchmark para una visión completa.
(ej:
bencher mock)
Solicitudes de Fusión
Para detectar regresiones de rendimiento en las Solicitudes de Fusión, necesitarás ejecutar tus pruebas de rendimiento en las MRs. El siguiente ejemplo solo debe usarse para ramas dentro del mismo repositorio.
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- Actualiza el archivo CI/CD de GitLab.
(ej:
.gitlab-ci.yml) - Crea un trabajo CI/CD en GitLab.
(ej:
benchmark_mr_branch) - Ejecuta
ifel pipeline fue activado por unmerge_request_event. Consulta la documentación derulesde GitLab CI/CD y la documentación de variables predefinidas de GitLab CI/CD para una visión completa. (ej:rules: if: ...) - Establece la
imageen la que se ejecutará el trabajo. Consulta la documentación deimagede GitLab CI/CD para una visión completa. (ej:image: debian:bullseye) - Instala la Bencher CLI utilizando el script de conveniencia.
(ej:
before_script: ...) - Usa el subcomando CLI
bencher runpara ejecutar tus pruebas de rendimiento de la rama de la solicitud de fusión. Consulta el subcomando CLIbencher runpara una visión completa. (ej:bencher run) - Configura la opción
--projectal slug del Proyecto. Consulta la documentación de la opción--projectpara más detalles. (ej:--project project-abc4567-wxyz123456789) - Configura la opción
--tokena la variable de entorno enmascaradaBENCHER_API_TOKEN. Consulta la documentación de la opción--tokenpara más detalles. (ej:--token "$BENCHER_API_TOKEN") - Configura la opción
--branchal nombre de la rama MR utilizando una variable predefinida de GitLab CI/CD. Consulta la documentación de la opción--branchpara una visión completa. (ej:--branch "$CI_COMMIT_REF_NAME") - Configura el Punto de Inicio para la Rama MR:
- Configura la opción
--start-pointal punto de inicio de la Rama MR utilizando una variable predefinida de GitLab CI/CD. Consulta la documentación de la opción--start-pointpara una visión completa. (ej:--start-point "$CI_MERGE_REQUEST_TARGET_BRANCH_NAME") - Configura la opción
--start-point-hashpara el hashgitdel punto de inicio de la Rama MR utilizando una variable predefinida de GitLab CI/CD. Consulta la documentación de la opción--start-point-hashpara una visión completa. (ej:--start-point-hash "$CI_MERGE_REQUEST_TARGET_BRANCH_SHA") - Activa el indicador
--start-point-clone-thresholdspara clonar los Umbrales desde el punto de inicio. Consulta la documentación de la opción--start-point-clone-thresholdspara una visión completa. (ej:--start-point-clone-thresholds) - Activa el indicador
--start-point-resetpara siempre restablecer la Rama MR al punto de inicio. Esto evitará la deriva de datos de referencia. Consulta la documentación de la opción--start-point-resetpara una visión completa. (ej:--start-point-reset)
- Configura la opción
- Configura la opción
--testbedal nombre del Testbed. Esto probablemente debería coincidir con la máquina seleccionada enimage. Consulta la documentación de la opción--testedpara más detalles. (ej:--testbed debian:bullseye) - Activa el indicador
--errpara fallar el comando si se genera una Alerta. Consulta la documentación de la opción--errpara una visión completa. (ej:--err) - Configura la opción
--adapteral Formato Métrico de Bencher JSON (json) que es generado porbencher mock. Consulta los adaptadores de prueba de referencia para una visión completa. (ej:--adapter json) - Especifica los argumentos del comando de referencia.
Consulta la documentación de comando de referencia para una visión completa.
(ej:
bencher mock)
Para limpiar la rama MR después de que su MR esté cerrado,
puedes crear un trabajo separado que consulte el estado del MR utilizando la API de GitLab.
Si el estado es closed, este trabajo archivará la rama MR utilizando el comando 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- Actualiza el archivo de GitLab CI/CD.
(ej:
.gitlab-ci.yml) - Crea un trabajo de GitLab CI/CD.
(ej:
archive_mr_branch) - Ejecútalo
siel pipeline fue desencadenado por unmerge_request_event. Consulta la documentación de reglas de GitLab CI/CD y variables predefinidas de GitLab CI/CD para una visión completa. (ej:rules: if: ...) - Establece la
imageen la que se ejecutará el trabajo. Consulta la documentación de imagen de GitLab CI/CD para una visión completa. (ej:image: debian:bullseye) - Instala la CLI de Bencher usando el script de conveniencia.
(ej:
before_script: curl ...) - Verifica el estado del MR usando la API de GitLab.
(ej:
before_script: MR_STATE=$(...)) - Utiliza el subcomando
bencher archivepara archivar la rama MR si el estado del MR esclosed. (ej:bencher archive) - Establece la opción
--projectal slug del Proyecto. Consulta la documentación de--projectpara más detalles. (ej:--project project-abc4567-wxyz123456789) - Establece la opción
--tokencomo la variable de entorno enmascaradaBENCHER_API_TOKEN. Consulta la documentación de--tokenpara más detalles. (ej:--token "$BENCHER_API_TOKEN") - Establece la opción
--branchal nombre de la rama MR utilizando una variable predefinida de GitLab CI/CD. (ej:--branch "$CI_COMMIT_REF_NAME")
🐰 ¡Felicidades! ¡Has aprendido cómo usar Bencher en GitLab CI/CD! 🎉