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.
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- Créez un fichier GitLab CI/CD.
(ex :
.gitlab-ci.yml) - Créez un job GitLab CI/CD.
(ex :
benchmark_target_branch) - Exécutez
ifle pipeline a Ă©tĂ© dĂ©clenchĂ© par unpushsur la branchemain. Consultez la documentationrulesde GitLab CI/CD et la documentation des variables prĂ©dĂ©finies de GitLab CI/CD pour un aperçu complet. (ex :rules: if: ...) - DĂ©finissez lâ
imagedans laquelle le job sâexĂ©cutera. Consultez la documentationimagede GitLab CI/CD pour un aperçu complet. (ex :image: debian:bullseye) - Installez le Bencher CLI Ă lâaide du script pratique.
(ex :
before_script: ...) - Utilisez la sous-commande CLI
bencher runpour exĂ©cuter vos benchmarks de la branchemain. Consultez la sous-commande CLIbencher runpour un aperçu complet. (ex :bencher run) - DĂ©finissez lâoption
--projectsur le slug du projet. Consultez la documentation--projectpour plus de dĂ©tails. (ex :--project project-abc4567-wxyz123456789) - DĂ©finissez lâoption
--tokensur la variable dâenvironnement masquĂ©eBENCHER_API_TOKEN. Consultez la documentation--tokenpour plus de dĂ©tails. (ex :--token "$BENCHER_API_TOKEN") - DĂ©finissez lâoption
--branchsur le nom de la branche. Consultez la documentation--branchpour un aperçu complet. (ex :--branch main) - DĂ©finissez lâoption
--testbedsur le nom du banc dâessai. Cela doit probablement correspondre Ă la machine sĂ©lectionnĂ©e dansimage. Consultez la documentation--testbedpour plus de dĂ©tails. (ex :--testbed debian:bullseye) - DĂ©finissez le seuil pour la branche
main, le banc dâessaidebian:bullseye, et la mesure delatency:- DĂ©finissez lâoption
--threshold-measuresur la mesure intĂ©grĂ©elatencyqui est gĂ©nĂ©rĂ©e parbencher mock. Consultez la documentation--threshold-measurepour plus de dĂ©tails. (ex :--threshold-measure latency) - DĂ©finissez lâoption
--threshold-testsur un test t de Student (t_test). Consultez la documentation--threshold-testpour un aperçu complet. (ex :--threshold-test t_test) - DĂ©finissez lâoption
--threshold-max-sample-sizesur la taille dâĂ©chantillon maximale de64. Consultez la documentation--threshold-max-sample-sizepour plus de dĂ©tails. (ex :--threshold-max-sample-size 64) - DĂ©finissez lâoption
--threshold-upper-boundarysur la limite supérieure de0.99. Consultez la documentation--threshold-upper-boundarypour plus de détails. (ex :--threshold-upper-boundary 0.99) - Définissez le flag
--thresholds-resetpour que seul le seuil spécifié soit actif. Consultez la documentation--thresholds-resetpour un aperçu complet. (ex :--thresholds-reset)
- DĂ©finissez lâoption
- Définissez le flag
--errpour que la commande Ă©choue si une alerte est gĂ©nĂ©rĂ©e. Consultez la documentation--errpour un aperçu complet. (ex :--err) - DĂ©finissez lâoption
--adaptersur le format JSON de Bencher Metric (json) Bencher Metric Format JSON (json) qui est généré parbencher mock. Consultez les adaptateurs de harnais de benchmark pour un aperçu complet. (ex :--adapter json) - 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.
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- Mettez Ă jour le fichier GitLab CI/CD.
(ex :
.gitlab-ci.yml) - Créez un travail GitLab CI/CD.
(ex :
benchmark_mr_branch) - Exécutez si le pipeline a été déclenché par un
merge_request_event. Consultez la documentation desrĂšglesGitLab CI/CD et la documentation des variables prĂ©dĂ©finies GitLab CI/CD pour un aperçu complet. (ex :rules: if: ...) - DĂ©finissez lâ
imagedans laquelle le travail sera exĂ©cutĂ©. Consultez la documentation desimagesGitLab CI/CD pour un aperçu complet. (ex :image: debian:bullseye) - Installez lâoutil Bencher CLI en utilisant le script pratique.
(ex :
before_script: ...) - Utilisez la sous-commande CLI
bencher runpour exĂ©cuter vos benchmarks de branche de demande de fusion. Consultez la sous-commande CLIbencher runpour un aperçu complet. (ex :bencher run) - DĂ©finissez lâoption
--projectsur le slug du Projet. Consultez la documentation--projectpour plus de dĂ©tails. (ex :--project project-abc4567-wxyz123456789) - DĂ©finissez lâoption
--tokensur la variable dâenvironnement masquĂ©eBENCHER_API_TOKEN. Consultez la documentation--tokenpour plus de dĂ©tails. (ex :--token "$BENCHER_API_TOKEN") - DĂ©finissez lâoption
--branchsur le nom de la branche MR en utilisant une variable prédéfinie GitLab CI/CD. Consultez la documentation--branchpour un aperçu complet. (ex :--branch "$CI_COMMIT_REF_NAME") - Définissez le Point de Départ pour la Branchement MR :
- DĂ©finissez lâoption
--start-pointsur le point de dĂ©part de la branche MR en utilisant une variable prĂ©dĂ©finie GitLab CI/CD. Consultez la documentation--start-pointpour un aperçu complet. (ex :--start-point "$CI_MERGE_REQUEST_TARGET_BRANCH_NAME") - DĂ©finissez lâoption
--start-point-hashsur le hashgitdu point de départ de la branche MR en utilisant une variable prédéfinie GitLab CI/CD. Consultez la documentation--start-point-hashpour un aperçu complet. (ex :--start-point-hash "$CI_MERGE_REQUEST_TARGET_BRANCH_SHA") - Activez le drapeau
--start-point-clone-thresholdspour cloner les Seuils du point de départ. Consultez la documentation--start-point-clone-thresholdspour un aperçu complet. (ex :--start-point-clone-thresholds) - Activez le drapeau
--start-point-resetpour 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-resetpour un aperçu complet. (ex :--start-point-reset)
- DĂ©finissez lâoption
- DĂ©finissez lâoption
--testbedsur le nom du banc dâessai. Cela devrait probablement correspondre Ă la machine sĂ©lectionnĂ©e dansimage. Consultez la documentation--testbedpour plus de dĂ©tails. (ex :--testbed debian:bullseye) - Activez le drapeau
--errpour Ă©chouer Ă la commande si une alerte est gĂ©nĂ©rĂ©e. Consultez la documentation--errpour un aperçu complet. (ex :--err) - DĂ©finissez lâoption
--adaptersur Bencher Metric Format JSON (json) qui est généré parbencher mock. Consultez les adaptateurs de harnais de benchmark pour un aperçu complet. (ex :--adapter json) - 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.
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- Mettez Ă jour le fichier CI/CD de GitLab.
(ex:
.gitlab-ci.yml) - Créez un travail CI/CD de GitLab.
(ex:
archive_mr_branch) - Exécutez
ifle pipeline a Ă©tĂ© dĂ©clenchĂ© par unmerge_request_event. Consultez la documentation desrulesCI/CD de GitLab et la documentation des variables prĂ©dĂ©finies CI/CD de GitLab pour un aperçu complet. (ex:rules: if: ...) - DĂ©finissez lâ
imagedans laquelle le travail sâexĂ©cutera. Consultez la documentation de lâimageCI/CD de GitLab pour un aperçu complet. (ex:image: debian:bullseye) - Installez le Bencher CLI en utilisant le script de commoditĂ©.
(ex:
before_script: curl ...) - VĂ©rifiez lâĂ©tat de la MR via lâAPI GitLab.
(ex:
before_script: MR_STATE=$(...)) - Utilisez la sous-commande CLI
bencher archivepour archiver la branche MR si lâĂ©tat de la MR estclosed. (ex:bencher archive) - DĂ©finissez lâoption
--projectsur le slug du projet. Consultez la documentation de lâoption--projectpour plus de dĂ©tails. (ex:--project project-abc4567-wxyz123456789) - DĂ©finissez lâoption
--tokensur la variable dâenvironnement masquĂ©eBENCHER_API_TOKEN. Consultez la documentation de lâoption--tokenpour plus de dĂ©tails. (ex:--token "$BENCHER_API_TOKEN") - DĂ©finissez lâoption
--branchsur 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 ! đ