Wie man Bencher in GitLab CI/CD verwendet
Depending on your use case, you can set up Continuous Benchmarking in GitLab CI/CD for your:
Stellen Sie sicher, dass Sie ein API-Token erstellt haben und es als maskierte Variable mit dem Namen BENCHER_API_TOKEN festlegen, bevor Sie fortfahren!
Navigieren Sie zu Ihr Repo -> Einstellungen -> CI/CD -> Variablen -> Erweitern -> Variable hinzufügen.
Der Variablen-Schlüssel sollte BENCHER_API_TOKEN und der Variablen-Wert Ihr API-Token sein.
Aktivieren Sie die Kästchen für Variable schützen und Variable maskieren.
Ziel-Branch
Ein Eckpfeiler des Statistical Continuous Benchmarking ist das Vorhandensein einer historischen Basislinie für Ihren Ziel-Branch. Diese historische Basislinie kann dann verwendet werden, um Leistungsregressionen in Merge Requests zu erkennen.
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- Erstellen Sie eine GitLab CI/CD-Datei.
(z.B.:
.gitlab-ci.yml) - Erstellen Sie einen GitLab CI/CD-Job.
(z.B.:
benchmark_target_branch) - Führen Sie das Kommando
ifaus, wenn die Pipeline durch einenpushauf denmain-Branch ausgelöst wurde. Siehe die GitLab CI/CDrulesDokumentation und die GitLab CI/CD vordefinierten Variablen Dokumentation für einen umfassenden Überblick. (z.B.:rules: if: ...) - Legen Sie das
imagefest, in dem der Job ausgeführt wird. Siehe die GitLab CI/CDimageDokumentation für einen vollständigen Überblick. (z.B.:image: debian:bullseye) - Installieren Sie die Bencher CLI mit dem Convenience-Skript.
(z.B.:
before_script: ...) - Verwenden Sie den
bencher runCLI-Unterbefehl, um Ihremain-Branch-Benchmarks auszuführen. Siehe denbencher runCLI-Unterbefehl für eine vollständige Übersicht. (z.B.:bencher run) - Setzen Sie die
--project-Option auf den Project-Slug. Siehe die--project-Dokumentation für weitere Details. (z.B.:--project project-abc4567-wxyz123456789) - Setzen Sie die
--token-Option auf die maskierteBENCHER_API_TOKENUmgebungsvariable. Siehe die--token-Dokumentation für weitere Details. (z.B.:--token "$BENCHER_API_TOKEN") - Setzen Sie die
--branch-Option auf den Branch-Namen. Siehe die--branch-Dokumentation für einen vollständigen Überblick. (z.B.:--branch main) - Setzen Sie die
--testbed-Option auf den Testbed-Namen. Dies sollte wahrscheinlich mit der inimageausgewählten Maschine übereinstimmen. Siehe die--tested-Dokumentation für weitere Details. (z.B.:--testbed debian:bullseye) - Setzen Sie die Schwelle für den
main-Branch,debian:bullseyeTestbed, undlatencyMeasurement:- Setzen Sie die
--threshold-measure-Option auf das eingebautelatencyMeasurement, das durch denbencher mockerzeugt wird. Siehe die--threshold-measure-Dokumentation für weitere Details. (z.B.:--threshold-measure latency) - Setzen Sie die
--threshold-test-Option auf einen t-Test (t_test). Siehe die--threshold-test-Dokumentation für einen vollständigen Überblick. (z.B.:--threshold-test t_test) - Setzen Sie die
--threshold-max-sample-size-Option auf die maximale Stichprobengröße von64. Siehe die--threshold-max-sample-size-Dokumentation für weitere Details. (z.B.:--threshold-max-sample-size 64) - Setzen Sie die
--threshold-upper-boundary-Option auf die obere Grenze von0,99. Siehe die--threshold-upper-boundary-Dokumentation für weitere Details. (z.B.:--threshold-upper-boundary 0.99) - Setzen Sie das
--thresholds-reset-Flag, sodass nur die festgelegte Schwelle aktiv ist. Siehe die--thresholds-reset-Dokumentation für einen vollständigen Überblick. (z.B.:--thresholds-reset)
- Setzen Sie die
- Setzen Sie das
--err-Flag, um den Befehl zu beenden, wenn eine Warnung generiert wird. Siehe die--err-Dokumentation für einen vollständigen Überblick. (z.B.:--err) - Setzen Sie die
--adapter-Option auf Bencher Metric Format JSON (json), das durch denbencher mockerzeugt wird. Siehe Benchmark-Harness-Adapter für einen vollständigen Überblick. (z.B.:--adapter json) - Geben Sie die Argumente des Benchmark-Kommandos an.
Siehe Benchmark-Kommando für einen vollständigen Überblick.
(z.B.:
bencher mock)
Merge Requests
Um Leistungsregressionen in Merge Requests zu erkennen, müssen Sie Ihre Benchmarks auf MRs ausführen. Das untenstehende Beispiel sollte nur für Branches innerhalb desselben Repositories verwendet werden.
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- Aktualisieren Sie die GitLab CI/CD-Datei.
(z.B.:
.gitlab-ci.yml) - Erstellen Sie einen GitLab CI/CD-Job.
(z.B.:
benchmark_mr_branch) - Führen Sie
ifaus, wenn die Pipeline durch einmerge_request_eventausgelöst wurde. Siehe die GitLab CI/CDrulesDokumentation und GitLab CI/CD vordefinierte Variablen Dokumentation für einen vollständigen Überblick. (z.B.:rules: if: ...) - Legen Sie das
imagefest, in dem der Job ausgeführt wird. Siehe die GitLab CI/CDimageDokumentation für einen vollständigen Überblick. (z.B.:image: debian:bullseye) - Installieren Sie die Bencher CLI mit dem convenience script.
(z.B.:
before_script: ...) - Verwenden Sie den
bencher runCLI-Unterbefehl, um Ihre Merge Request Branch Benchmarks auszuführen. Siehe denbencher runCLI-Unterbefehl für einen vollständigen Überblick. (z.B.:bencher run) - Setzen Sie die
--projectOption auf den Projekt-Slug. Siehe die--projectDokumentation für mehr Details. (z.B.:--project project-abc4567-wxyz123456789) - Setzen Sie die
--tokenOption auf die maskierte UmgebungsvariableBENCHER_API_TOKEN. Siehe die--tokenDokumentation für mehr Details. (z.B.:--token "$BENCHER_API_TOKEN") - Setzen Sie die
--branchOption auf den Namen des MR-Branches mit einer vordefinierten GitLab CI/CD Variablen. Siehe die--branchDokumentation für einen vollständigen Überblick. (z.B.:--branch "$CI_COMMIT_REF_NAME") - Setzen Sie den Startpunkt für den MR-Branch:
- Setzen Sie die
--start-pointOption auf den Startpunkt des MR-Branches mit einer vordefinierten GitLab CI/CD Variablen. Siehe die--start-pointDokumentation für einen vollständigen Überblick. (z.B.:--start-point "$CI_MERGE_REQUEST_TARGET_BRANCH_NAME") - Setzen Sie die
--start-point-hashOption auf dengit-Hash des Startpunktes des MR-Branches mit einer vordefinierten GitLab CI/CD Variablen. Siehe die--start-point-hashDokumentation für einen vollständigen Überblick. (z.B.:--start-point-hash "$CI_MERGE_REQUEST_TARGET_BRANCH_SHA") - Setzen Sie das
--start-point-clone-thresholdsFlag, um die Schwellenwerte vom Startpunkt zu klonen. Siehe die--start-point-clone-thresholdsDokumentation für einen vollständigen Überblick. (z.B.:--start-point-clone-thresholds) - Setzen Sie das
--start-point-resetFlag, um den MR-Branch immer auf den Startpunkt zurückzusetzen. Dies verhindert ein Abdriften der Benchmark-Daten. Siehe die--start-point-resetDokumentation für einen vollständigen Überblick. (z.B.:--start-point-reset)
- Setzen Sie die
- Setzen Sie die
--testbedOption auf den Namen des Testbeds. Dies sollte wahrscheinlich die Maschine widerspiegeln, die inimageausgewählt wurde. Siehe die--testbedDokumentation für mehr Details. (z.B.:--testbed debian:bullseye) - Setzen Sie das
--errFlag, um den Befehl bei Auslösung eines Alarms zum Abbruch zu bringen. Siehe die--errDokumentation für einen vollständigen Überblick. (z.B.:--err) - Setzen Sie die
--adapterOption auf das Bencher Metric Format JSON (json), das durchbencher mockerzeugt wird. Siehe Benchmark-Harness-Adapter für einen vollständigen Überblick. (z.B.:--adapter json) - Geben Sie die Argumente für den Benchmarkbefehl an.
Siehe Benchmark-Befehl für einen vollständigen Überblick.
(z.B.:
bencher mock)
Um den MR-Branch nach dem Schließen seines MRs aufzuräumen, können Sie einen separaten Job erstellen, der den MR-Status über die GitLab-API abfragt. Wenn der Status closed ist, archiviert dieser Job den MR-Branch mit dem Befehl 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- Aktualisieren Sie die GitLab CI/CD-Datei.
(z.B.:
.gitlab-ci.yml) - Erstellen Sie einen GitLab CI/CD-Job.
(z.B.:
archive_mr_branch) - Führen Sie den Job aus,
wenndie Pipeline durch einmerge_request_eventausgelöst wurde. Siehe die GitLab CI/CDrulesDokumentation und die GitLab CI/CD vordefinierte Variablen Dokumentation für einen vollständigen Überblick. (z.B.:rules: if: ...) - Setzen Sie das
image, in dem der Job ausgeführt wird. Siehe die GitLab CI/CDimageDokumentation für einen vollständigen Überblick. (z.B.:image: debian:bullseye) - Installieren Sie die Bencher CLI mit dem Installationsskript.
(z.B.:
before_script: curl ...) - Überprüfen Sie den MR-Status über die GitLab-API.
(z.B.:
before_script: MR_STATE=$(...)) - Verwenden Sie das
bencher archiveCLI-Unterbefehl, um den MR-Branch zu archivieren, wenn der MR-Statusclosedist. (z.B.:bencher archive) - Setzen Sie die
--projectOption auf den Projektslug. Siehe die--projectDokumentation für mehr Details. (z.B.:--project project-abc4567-wxyz123456789) - Setzen Sie die
--tokenOption auf die maskierteBENCHER_API_TOKENUmgebungsvariable. Siehe die--tokenDokumentation für mehr Details. (z.B.:--token "$BENCHER_API_TOKEN") - Setzen Sie die
--branchOption auf den MR-Branch-Namen, indem Sie eine vordefinierte GitLab CI/CD-Variable verwenden. (z.B.:--branch "$CI_COMMIT_REF_NAME")
🐰 Glückwunsch! Du hast gelernt, wie man Bencher in GitLab CI/CD verwendet! 🎉