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.
- 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
if
aus, wenn die Pipeline durch einenpush
auf denmain
-Branch ausgelöst wurde. Siehe die GitLab CI/CDrules
Dokumentation und die GitLab CI/CD vordefinierten Variablen Dokumentation für einen umfassenden Überblick. (z.B.:rules: if: ...
) - Legen Sie das
image
fest, in dem der Job ausgeführt wird. Siehe die GitLab CI/CDimage
Dokumentation 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 run
CLI-Unterbefehl, um Ihremain
-Branch-Benchmarks auszuführen. Siehe denbencher run
CLI-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 save-walter-white-1234abcd
) - Setzen Sie die
--token
-Option auf die maskierteBENCHER_API_TOKEN
Umgebungsvariable. 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 inimage
ausgewä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:bullseye
Testbed, undlatency
Measurement:- Setzen Sie die
--threshold-measure
-Option auf das eingebautelatency
Measurement, das durch denbencher mock
erzeugt 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 mock
erzeugt 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.
- 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
if
aus, wenn die Pipeline durch einmerge_request_event
ausgelöst wurde. Siehe die GitLab CI/CDrules
Dokumentation und GitLab CI/CD vordefinierte Variablen Dokumentation für einen vollständigen Überblick. (z.B.:rules: if: ...
) - Legen Sie das
image
fest, in dem der Job ausgeführt wird. Siehe die GitLab CI/CDimage
Dokumentation 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 run
CLI-Unterbefehl, um Ihre Merge Request Branch Benchmarks auszuführen. Siehe denbencher run
CLI-Unterbefehl für einen vollständigen Überblick. (z.B.:bencher run
) - Setzen Sie die
--project
Option auf den Projekt-Slug. Siehe die--project
Dokumentation für mehr Details. (z.B.:--project save-walter-white-1234abcd
) - Setzen Sie die
--token
Option auf die maskierte UmgebungsvariableBENCHER_API_TOKEN
. Siehe die--token
Dokumentation für mehr Details. (z.B.:--token "$BENCHER_API_TOKEN"
) - Setzen Sie die
--branch
Option auf den Namen des MR-Branches mit einer vordefinierten GitLab CI/CD Variablen. Siehe die--branch
Dokumentation 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-point
Option auf den Startpunkt des MR-Branches mit einer vordefinierten GitLab CI/CD Variablen. Siehe die--start-point
Dokumentation für einen vollständigen Überblick. (z.B.:--start-point "$CI_MERGE_REQUEST_TARGET_BRANCH_NAME"
) - Setzen Sie die
--start-point-hash
Option auf dengit
-Hash des Startpunktes des MR-Branches mit einer vordefinierten GitLab CI/CD Variablen. Siehe die--start-point-hash
Dokumentation für einen vollständigen Überblick. (z.B.:--start-point-hash "$CI_MERGE_REQUEST_TARGET_BRANCH_SHA"
) - Setzen Sie das
--start-point-clone-thresholds
Flag, um die Schwellenwerte vom Startpunkt zu klonen. Siehe die--start-point-clone-thresholds
Dokumentation für einen vollständigen Überblick. (z.B.:--start-point-clone-thresholds
) - Setzen Sie das
--start-point-reset
Flag, um den MR-Branch immer auf den Startpunkt zurückzusetzen. Dies verhindert ein Abdriften der Benchmark-Daten. Siehe die--start-point-reset
Dokumentation für einen vollständigen Überblick. (z.B.:--start-point-reset
)
- Setzen Sie die
- Setzen Sie die
--testbed
Option auf den Namen des Testbeds. Dies sollte wahrscheinlich die Maschine widerspiegeln, die inimage
ausgewählt wurde. Siehe die--testbed
Dokumentation für mehr Details. (z.B.:--testbed debian:bullseye
) - Setzen Sie das
--err
Flag, um den Befehl bei Auslösung eines Alarms zum Abbruch zu bringen. Siehe die--err
Dokumentation für einen vollständigen Überblick. (z.B.:--err
) - Setzen Sie die
--adapter
Option auf das Bencher Metric Format JSON (json
), das durchbencher mock
erzeugt 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
.
- 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,
wenn
die Pipeline durch einmerge_request_event
ausgelöst wurde. Siehe die GitLab CI/CDrules
Dokumentation 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/CDimage
Dokumentation 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 archive
CLI-Unterbefehl, um den MR-Branch zu archivieren, wenn der MR-Statusclosed
ist. (z.B.:bencher archive
) - Setzen Sie die
--project
Option auf den Projektslug. Siehe die--project
Dokumentation für mehr Details. (z.B.:--project save-walter-white-1234abcd
) - Setzen Sie die
--token
Option auf die maskierteBENCHER_API_TOKEN
Umgebungsvariable. Siehe die--token
Dokumentation für mehr Details. (z.B.:--token "$BENCHER_API_TOKEN"
) - Setzen Sie die
--branch
Option 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! 🎉