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.

.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. Cree un archivo de CI/CD de GitLab. (ej: .gitlab-ci.yml)
  2. Cree un trabajo de CI/CD de GitLab. (ej: benchmark_target_branch)
  3. Ejecute if el pipeline fue disparado por un push a la rama main. Vea la documentación de rules de CI/CD de GitLab y la documentación de variables predefinidas de CI/CD de GitLab para una visión completa. (ej: rules: if: ...)
  4. Configure la image en la que se ejecutará el trabajo. Vea la documentación de image de CI/CD de GitLab para una visión completa. (ej: image: debian:bullseye)
  5. Instale la CLI de Bencher usando el script de conveniencia. (ej: before_script: ...)
  6. Use el subcomando de CLI bencher run para ejecutar sus benchmarks de la rama main. Vea el subcomando bencher run de la CLI para una visión completa. (ej: bencher run)
  7. Configure la opción --project al slug del proyecto. Vea los documentos de --project para más detalles. (ej: --project save-walter-white-1234abcd)
  8. Configure la opción --token a la variable de entorno enmascarada BENCHER_API_TOKEN. Vea los documentos de --token para más detalles. (ej: --token "$BENCHER_API_TOKEN")
  9. Configure la opción --branch al nombre de la rama. Vea los documentos de --branch para una visión completa. (ej: --branch main)
  10. Configure la opción --testbed al nombre del Testbed. Esto probablemente deba coincidir con la máquina seleccionada en image. Vea los documentos de --testbed para más detalles. (ej: --testbed debian:bullseye)
  11. Configure el Umbral para la rama main, el Testbed debian:bullseye y la Medida latency:
    1. Configure la opción --threshold-measure a la Medida latency incorporada que se genera por bencher mock. Vea los documentos --threshold-measure para más detalles. (ej: --threshold-measure latency)
    2. Configure la opción --threshold-test a una prueba t de Student (t_test). Vea los documentos de --threshold-test para una visión completa. (ej: --threshold-test t_test)
    3. Configure la opción --threshold-max-sample-size al tamaño de muestra máximo de 64. Vea los documentos de --threshold-max-sample-size para más detalles. (ej: --threshold-max-sample-size 64)
    4. Configure la opción --threshold-upper-boundary al Límite Superior de 0.99. Vea los documentos de --threshold-upper-boundary para más detalles. (ej: --threshold-upper-boundary 0.99)
    5. Configure la bandera --thresholds-reset para que solo el Umbral especificado esté activo. Vea los documentos de --thresholds-reset para una visión completa. (ej: --thresholds-reset)
  12. Configure la bandera --err para que el comando falle si se genera una Alerta. Vea los documentos de --err para una visión completa. (ej: --err)
  13. Configure la opción --adapter a Bencher Metric Format JSON (json) que se genera por bencher mock. Vea adaptadores de benchmark harness para una visión completa. (ej: --adapter json)
  14. 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.

.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. Actualiza el archivo CI/CD de GitLab. (ej: .gitlab-ci.yml)
  2. Crea un trabajo CI/CD en GitLab. (ej: benchmark_mr_branch)
  3. Ejecuta if el pipeline fue activado por un merge_request_event. Consulta la documentación de rules de GitLab CI/CD y la documentación de variables predefinidas de GitLab CI/CD para una visión completa. (ej: rules: if: ...)
  4. Establece la image en la que se ejecutará el trabajo. Consulta la documentación de image de GitLab CI/CD para una visión completa. (ej: image: debian:bullseye)
  5. Instala la Bencher CLI utilizando el script de conveniencia. (ej: before_script: ...)
  6. Usa el subcomando CLI bencher run para ejecutar tus pruebas de rendimiento de la rama de la solicitud de fusión. Consulta el subcomando CLI bencher run para una visión completa. (ej: bencher run)
  7. Configura la opción --project al slug del Proyecto. Consulta la documentación de la opción --project para más detalles. (ej: --project save-walter-white-1234abcd)
  8. Configura la opción --token a la variable de entorno enmascarada BENCHER_API_TOKEN. Consulta la documentación de la opción --token para más detalles. (ej: --token "$BENCHER_API_TOKEN")
  9. Configura la opción --branch al nombre de la rama MR utilizando una variable predefinida de GitLab CI/CD. Consulta la documentación de la opción --branch para una visión completa. (ej: --branch "$CI_COMMIT_REF_NAME")
  10. Configura el Punto de Inicio para la Rama MR:
    1. Configura la opción --start-point al 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 para una visión completa. (ej: --start-point "$CI_MERGE_REQUEST_TARGET_BRANCH_NAME")
    2. Configura la opción --start-point-hash para el hash git del 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-hash para una visión completa. (ej: --start-point-hash "$CI_MERGE_REQUEST_TARGET_BRANCH_SHA")
    3. Activa el indicador --start-point-clone-thresholds para clonar los Umbrales desde el punto de inicio. Consulta la documentación de la opción --start-point-clone-thresholds para una visión completa. (ej: --start-point-clone-thresholds)
    4. Activa el indicador --start-point-reset para 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-reset para una visión completa. (ej: --start-point-reset)
  11. Configura la opción --testbed al nombre del Testbed. Esto probablemente debería coincidir con la máquina seleccionada en image. Consulta la documentación de la opción --tested para más detalles. (ej: --testbed debian:bullseye)
  12. Activa el indicador --err para fallar el comando si se genera una Alerta. Consulta la documentación de la opción --err para una visión completa. (ej: --err)
  13. Configura la opción --adapter al Formato Métrico de Bencher JSON (json) que es generado por bencher mock. Consulta los adaptadores de prueba de referencia para una visión completa. (ej: --adapter json)
  14. 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.

.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. Actualiza el archivo de GitLab CI/CD. (ej: .gitlab-ci.yml)
  2. Crea un trabajo de GitLab CI/CD. (ej: archive_mr_branch)
  3. Ejecútalo si el pipeline fue desencadenado por un merge_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: ...)
  4. Establece la image en 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)
  5. Instala la CLI de Bencher usando el script de conveniencia. (ej: before_script: curl ...)
  6. Verifica el estado del MR usando la API de GitLab. (ej: before_script: MR_STATE=$(...))
  7. Utiliza el subcomando bencher archive para archivar la rama MR si el estado del MR es closed. (ej: bencher archive)
  8. Establece la opción --project al slug del Proyecto. Consulta la documentación de --project para más detalles. (ej: --project save-walter-white-1234abcd)
  9. Establece la opción --token como la variable de entorno enmascarada BENCHER_API_TOKEN. Consulta la documentación de --token para más detalles. (ej: --token "$BENCHER_API_TOKEN")
  10. Establece la opción --branch al 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! 🎉


Continúa: Visión General del Benchmarking ➡

🤖 Este documento fue generado automáticamente por OpenAI GPT-4. Puede que no sea exacto y contenga errores. Si encuentra algún error, abra un problema en GitHub.


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