Comment utiliser Bencher dans 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.

Branche Cible

Un pilier du Benchmarking Continu Statistique est d’avoir une base historique pour votre branche cible. Cette base historique peut alors ĂȘtre utilisĂ©e pour dĂ©tecter les rĂ©gressions de performance dans les demandes de fusion.

.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. Créez un fichier GitLab CI/CD. (ex : .gitlab-ci.yml)
  2. Créez un job GitLab CI/CD. (ex : benchmark_target_branch)
  3. Exécutez if le pipeline a été déclenché par un push sur la branche main. Consultez la documentation rules de GitLab CI/CD et la documentation des variables prédéfinies de GitLab CI/CD pour un aperçu complet. (ex : rules: if: ...)
  4. DĂ©finissez l’image dans laquelle le job s’exĂ©cutera. Consultez la documentation image de GitLab CI/CD pour un aperçu complet. (ex : image: debian:bullseye)
  5. Installez le Bencher CLI à l’aide du script pratique. (ex : before_script: ...)
  6. Utilisez la sous-commande CLI bencher run pour exécuter vos benchmarks de la branche main. Consultez la sous-commande CLI bencher run pour un aperçu complet. (ex : bencher run)
  7. DĂ©finissez l’option --project sur le slug du projet. Consultez la documentation --project pour plus de dĂ©tails. (ex : --project save-walter-white-1234abcd)
  8. DĂ©finissez l’option --token sur la variable d’environnement masquĂ©e BENCHER_API_TOKEN. Consultez la documentation --token pour plus de dĂ©tails. (ex : --token "$BENCHER_API_TOKEN")
  9. DĂ©finissez l’option --branch sur le nom de la branche. Consultez la documentation --branch pour un aperçu complet. (ex : --branch main)
  10. DĂ©finissez l’option --testbed sur le nom du banc d’essai. Cela doit probablement correspondre Ă  la machine sĂ©lectionnĂ©e dans image. Consultez la documentation --testbed pour plus de dĂ©tails. (ex : --testbed debian:bullseye)
  11. DĂ©finissez le seuil pour la branche main, le banc d’essai debian:bullseye, et la mesure de latency :
    1. DĂ©finissez l’option --threshold-measure sur la mesure intĂ©grĂ©e latency qui est gĂ©nĂ©rĂ©e par bencher mock. Consultez la documentation --threshold-measure pour plus de dĂ©tails. (ex : --threshold-measure latency)
    2. DĂ©finissez l’option --threshold-test sur un test t de Student (t_test). Consultez la documentation --threshold-test pour un aperçu complet. (ex : --threshold-test t_test)
    3. DĂ©finissez l’option --threshold-max-sample-size sur la taille d’échantillon maximale de 64. Consultez la documentation --threshold-max-sample-size pour plus de dĂ©tails. (ex : --threshold-max-sample-size 64)
    4. DĂ©finissez l’option --threshold-upper-boundary sur la limite supĂ©rieure de 0.99. Consultez la documentation --threshold-upper-boundary pour plus de dĂ©tails. (ex : --threshold-upper-boundary 0.99)
    5. Définissez le flag --thresholds-reset pour que seul le seuil spécifié soit actif. Consultez la documentation --thresholds-reset pour un aperçu complet. (ex : --thresholds-reset)
  12. Définissez le flag --err pour que la commande échoue si une alerte est générée. Consultez la documentation --err pour un aperçu complet. (ex : --err)
  13. DĂ©finissez l’option --adapter sur le format JSON de Bencher Metric (json) Bencher Metric Format JSON (json) qui est gĂ©nĂ©rĂ© par bencher mock. Consultez les adaptateurs de harnais de benchmark pour un aperçu complet. (ex : --adapter json)
  14. Spécifiez les arguments de commande du benchmark. Consultez la commande du benchmark pour un aperçu complet. (ex : bencher mock)

Demandes de Fusion

Pour dĂ©tecter une rĂ©gression de performance dans les Demandes de Fusion, vous devrez exĂ©cuter vos benchmarks sur les MRs. L’exemple ci-dessous ne doit ĂȘtre utilisĂ© que pour les branches au sein du mĂȘme dĂ©pĂŽt.

.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. Mettez Ă  jour le fichier GitLab CI/CD. (ex : .gitlab-ci.yml)
  2. Créez un travail GitLab CI/CD. (ex : benchmark_mr_branch)
  3. Exécutez si le pipeline a été déclenché par un merge_request_event. Consultez la documentation des rÚgles GitLab CI/CD et la documentation des variables prédéfinies GitLab CI/CD pour un aperçu complet. (ex : rules: if: ...)
  4. DĂ©finissez l’image dans laquelle le travail sera exĂ©cutĂ©. Consultez la documentation des images GitLab CI/CD pour un aperçu complet. (ex : image: debian:bullseye)
  5. Installez l’outil Bencher CLI en utilisant le script pratique. (ex : before_script: ...)
  6. Utilisez la sous-commande CLI bencher run pour exécuter vos benchmarks de branche de demande de fusion. Consultez la sous-commande CLI bencher run pour un aperçu complet. (ex : bencher run)
  7. DĂ©finissez l’option --project sur le slug du Projet. Consultez la documentation --project pour plus de dĂ©tails. (ex : --project save-walter-white-1234abcd)
  8. DĂ©finissez l’option --token sur la variable d’environnement masquĂ©e BENCHER_API_TOKEN. Consultez la documentation --token pour plus de dĂ©tails. (ex : --token "$BENCHER_API_TOKEN")
  9. DĂ©finissez l’option --branch sur le nom de la branche MR en utilisant une variable prĂ©dĂ©finie GitLab CI/CD. Consultez la documentation --branch pour un aperçu complet. (ex : --branch "$CI_COMMIT_REF_NAME")
  10. DĂ©finissez le Point de DĂ©part pour la Branchement MR :
    1. DĂ©finissez l’option --start-point sur le point de dĂ©part de la branche MR en utilisant une variable prĂ©dĂ©finie GitLab CI/CD. Consultez la documentation --start-point pour un aperçu complet. (ex : --start-point "$CI_MERGE_REQUEST_TARGET_BRANCH_NAME")
    2. DĂ©finissez l’option --start-point-hash sur le hash git du point de dĂ©part de la branche MR en utilisant une variable prĂ©dĂ©finie GitLab CI/CD. Consultez la documentation --start-point-hash pour un aperçu complet. (ex : --start-point-hash "$CI_MERGE_REQUEST_TARGET_BRANCH_SHA")
    3. Activez le drapeau --start-point-clone-thresholds pour cloner les Seuils du point de départ. Consultez la documentation --start-point-clone-thresholds pour un aperçu complet. (ex : --start-point-clone-thresholds)
    4. Activez le drapeau --start-point-reset pour toujours rĂ©initialiser la Branche MR au point de dĂ©part. Cela empĂȘchera la dĂ©rive des donnĂ©es des benchmarks. Consultez la documentation --start-point-reset pour un aperçu complet. (ex : --start-point-reset)
  11. DĂ©finissez l’option --testbed sur le nom du banc d’essai. Cela devrait probablement correspondre Ă  la machine sĂ©lectionnĂ©e dans image. Consultez la documentation --testbed pour plus de dĂ©tails. (ex : --testbed debian:bullseye)
  12. Activez le drapeau --err pour échouer à la commande si une alerte est générée. Consultez la documentation --err pour un aperçu complet. (ex : --err)
  13. DĂ©finissez l’option --adapter sur Bencher Metric Format JSON (json) qui est gĂ©nĂ©rĂ© par bencher mock. Consultez les adaptateurs de harnais de benchmark pour un aperçu complet. (ex : --adapter json)
  14. Spécifiez les arguments de la commande benchmark. Consultez la commande benchmark pour un aperçu complet. (ex : bencher mock)

Pour nettoyer la branche MR aprĂšs la fermeture de sa MR, vous pouvez crĂ©er un travail distinct qui interroge l’état de la MR en utilisant l’API GitLab. Si l’état est closed, ce travail archivera la branche MR en utilisant la commande 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. Mettez Ă  jour le fichier CI/CD de GitLab. (ex: .gitlab-ci.yml)
  2. Créez un travail CI/CD de GitLab. (ex: archive_mr_branch)
  3. Exécutez if le pipeline a été déclenché par un merge_request_event. Consultez la documentation des rules CI/CD de GitLab et la documentation des variables prédéfinies CI/CD de GitLab pour un aperçu complet. (ex: rules: if: ...)
  4. DĂ©finissez l’image dans laquelle le travail s’exĂ©cutera. Consultez la documentation de l’image CI/CD de GitLab pour un aperçu complet. (ex: image: debian:bullseye)
  5. Installez le Bencher CLI en utilisant le script de commodité. (ex: before_script: curl ...)
  6. VĂ©rifiez l’état de la MR via l’API GitLab. (ex: before_script: MR_STATE=$(...))
  7. Utilisez la sous-commande CLI bencher archive pour archiver la branche MR si l’état de la MR est closed. (ex: bencher archive)
  8. DĂ©finissez l’option --project sur le slug du projet. Consultez la documentation de l’option --project pour plus de dĂ©tails. (ex: --project save-walter-white-1234abcd)
  9. DĂ©finissez l’option --token sur la variable d’environnement masquĂ©e BENCHER_API_TOKEN. Consultez la documentation de l’option --token pour plus de dĂ©tails. (ex: --token "$BENCHER_API_TOKEN")
  10. DĂ©finissez l’option --branch sur le nom de la branche MR en utilisant une variable prĂ©dĂ©finie CI/CD de GitLab. (ex: --branch "$CI_COMMIT_REF_NAME")


🐰 FĂ©licitations ! Vous avez appris Ă  utiliser Bencher dans GitLab CI/CD ! 🎉


Continuez : Vue d’ensemble sur le Benchmarking ➡

đŸ€– Ce document a Ă©tĂ© automatiquement gĂ©nĂ©rĂ© par OpenAI GPT-4. Il peut ne pas ĂȘtre prĂ©cis et peut contenir des erreurs. Si vous trouvez des erreurs, veuillez ouvrir une issue sur GitHub.


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