GitLab CI/CDでBencherを使用する方法
Depending on your use case, you can set up Continuous Benchmarking in GitLab CI/CD for your:
確実に、APIトークンを作成し
、続行する前にマスクされた変数 BENCHER_API_TOKEN として設定してください!
Your Repo -> Settings -> CI/CD -> Variables -> Expand -> Add variable に移動します。
変数キーは BENCHER_API_TOKEN であり、変数値はあなたのAPIトークンであるべきです。
Protect variable と Mask variable のボックスの両方をチェックしてください。
ターゲットブランチ
統計的継続的ベンチマークの基盤となるのは、ターゲットブランチの履歴ベースラインを持つことです。 この履歴ベースラインを使用して、マージリクエストにおけるパフォーマンスの低下を検出できます。
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- GitLab CI/CDファイルを作成します。
(例:
.gitlab-ci.yml) - GitLab CI/CDジョブを作成します。
(例:
benchmark_target_branch) - パイプラインが
mainブランチへのpushによってトリガーされた場合にのみ実行します。 詳細については、GitLab CI/CDのrulesドキュメンテーションとGitLab CI/CDのあらかじめ定義された変数のドキュメンテーションをご覧ください。 (例:rules: if: ...) - ジョブが実行される
imageを設定します。 詳細については、GitLab CI/CDのimageドキュメンテーションをご覧ください。 (例:image: debian:bullseye) - 利便性のためのスクリプトを使用してBencher CLIをインストールします。
(例:
before_script: ...) bencher runCLI サブコマンドを使用してmainブランチのベンチマークを実行します。 詳細については、bencher runCLIサブコマンドをご覧ください。 (例:bencher run)- プロジェクトスラッグに
--projectオプションを設定します。 詳細については、--projectドキュメントをご覧ください。 (例:--project project-abc4567-wxyz123456789) - 隠された
BENCHER_API_TOKEN環境変数に--tokenオプションを設定します。 詳細については、--tokenドキュメントをご覧ください。 (例:--token "$BENCHER_API_TOKEN") --branchオプションをブランチ名に設定します。 詳細については、--branchドキュメントをご覧ください。 (例:--branch main)--testbedオプションをテストベッド名に設定します。 これは、おそらくimageで選択したマシンと一致させる必要があります。 詳細については、--testbedドキュメントをご覧ください。 (例:--testbed debian:bullseye)mainブランチ、debian:bullseyeテストベッド、およびlatency測定基準のための閾値を設定します。- 組み込みの
latency測定基準、bencher mockによって生成されるものに--threshold-measureオプションを設定します。 詳細については、--threshold-measureドキュメントをご覧ください。 (例:--threshold-measure latency) - スチューデントのt検定(
t_test)に--threshold-testオプションを設定します。 詳細については、--threshold-testドキュメントをご覧ください。 (例:--threshold-test t_test) - 最大サンプルサイズ
64に--threshold-max-sample-sizeオプションを設定します。 詳細については、--threshold-max-sample-sizeドキュメントをご覧ください。 (例:--threshold-max-sample-size 64) - 上限境界
0.99に--threshold-upper-boundaryオプションを設定します。 詳細については、--threshold-upper-boundaryドキュメントをご覧ください。 (例:--threshold-upper-boundary 0.99) - 特定された閾値のみがアクティブであるように
--thresholds-resetフラグを設定します。 詳細については、--thresholds-resetドキュメントをご覧ください。 (例:--thresholds-reset)
- 組み込みの
- アラートが生成された場合にコマンドが失敗するように
--errフラグを設定します。 詳細については、--errドキュメントをご覧ください。 (例:--err) bencher mockによって生成されるBencher Metric Format JSON (json)に--adapterオプションを設定します。 詳細については、ベンチマークハーネスアダプタをご覧ください。 (例:--adapter json)- ベンチマークコマンドの引数を指定します。
詳細については、ベンチマークコマンドをご覧ください。
(例:
bencher mock)
マージリクエスト
マージリクエストでパフォーマンスのリグレッションをキャッチするためには、MR上でベンチマークを実行する必要があります。 以下の例は、同じ リポジトリ内のブランチにのみ使用してください。
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- GitLab CI/CD ファイルを更新します。
(例:
.gitlab-ci.yml) - GitLab CI/CD ジョブを作成します。
(例:
benchmark_mr_branch) - パイプラインが
merge_request_eventによってトリガーされた場合に実行します。 GitLab CI/CDrulesドキュメント と GitLab CI/CD 説明変数ドキュメント を参照して、全体像を確認してください。 (例:rules: if: ...) - ジョブが実行される
imageを設定します。 GitLab CI/CDimageドキュメント を参照して、全体像を確認してください。 (例:image: debian:bullseye) - 便利なスクリプトを使用してBencher CLIをインストールします。
(例:
before_script: ...) bencher runCLIサブコマンド を使用してマージリクエストブランチのベンチマークを実行します。bencher runCLIサブコマンド を参照して、全体像を確認してください。 (例:bencher run)--projectオプションをプロジェクトスラグに設定します。--projectドキュメント を参照してください。 (例:--project project-abc4567-wxyz123456789)--tokenオプションをマスクされたBENCHER_API_TOKEN環境変数に設定します。--tokenドキュメント を参照してください。 (例:--token "$BENCHER_API_TOKEN")- GitLab CI/CD 説明変数 を使用して、
--branchオプションをMRブランチ名に設定します。--branchドキュメント を参照して、全体像を確認してください。 (例:--branch "$CI_COMMIT_REF_NAME") - MRブランチの開始ポイントを設定します:
- GitLab CI/CD 説明変数 を使用して、
--start-pointオプションをMRブランチの開始ポイントに設定します。--start-pointドキュメント を参照して、全体像を確認してください。 (例:--start-point "$CI_MERGE_REQUEST_TARGET_BRANCH_NAME") - GitLab CI/CD 説明変数 を使用して、
--start-point-hashオプションをMRブランチの開始ポイントのgitハッシュに設定します。--start-point-hashドキュメント を参照して、全体像を確認してください。 (例:--start-point-hash "$CI_MERGE_REQUEST_TARGET_BRANCH_SHA") - 開始ポイントからしきい値をクローンするために
--start-point-clone-thresholdsフラグを設定します。--start-point-clone-thresholdsドキュメント を参照して、全体像を確認してください。 (例:--start-point-clone-thresholds) - ベンチマークデータのドリフトを防ぐため、常にMRブランチを開始ポイントにリセットするために
--start-point-resetフラグを設定します。--start-point-resetドキュメント を参照して、全体像を確認してください。 (例:--start-point-reset)
- GitLab CI/CD 説明変数 を使用して、
--testbedオプションをテストベッド名に設定します。 これは、おそらくimageで選択したマシンと一致する必要があります。--testedドキュメント を参照してください。 (例:--testbed debian:bullseye)- アラートが発生した場合にコマンドを失敗させるために
--errフラグを設定します。--errドキュメント を参照して、全体像を確認してください。 (例:--err) bencher mockによって生成される Bencher Metric Format JSON (json) に--adapterオプションを設定します。 ベンチマークハーネスアダプターadapter json を参照して、全体像を確認してください。 (例:--adapter json)- ベンチマークコマンド引数を指定します。
ベンチマークコマンドcommand argument を参照して、全体像を確認してください。
(例:
bencher mock)
MRがクローズされた後にMRブランチをクリーンアップするためには、GitLab APIを使用してMRのステートをクエリする別のジョブを作成することができます。
ステートがclosedの場合、このジョブはbencher archiveコマンドを使用してMRブランチをアーカイブします。
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- GitLab CI/CDファイルを更新します。
(例:
.gitlab-ci.yml) - GitLab CI/CDジョブを作成します。
(例:
archive_mr_branch) - パイプラインが
merge_request_eventによってトリガーされた場合に実行します。 完全な概要については、GitLab CI/CDrulesのドキュメントとGitLab CI/CDの事前定義された変数のドキュメントを参照してください。 (例:rules: if: ...) - ジョブが実行される
imageを設定します。 完全な概要については、GitLab CI/CDimageのドキュメントを参照してください。 (例:image: debian:bullseye) - 便利なスクリプトを使用してBencher CLIをインストールします。
(例:
before_script: curl ...) - GitLab APIを使用してMRのステートを確認します。
(例:
before_script: MR_STATE=$(...)) - MRのステートが
closedの場合、bencher archiveCLIサブコマンドを使用してMRブランチをアーカイブします。 (例:bencher archive) - プロジェクトのスラッグに
--projectオプションを設定します。 詳細は--projectのドキュメントを参照してください。 (例:--project project-abc4567-wxyz123456789) - マスクされた
BENCHER_API_TOKEN環境変数を--tokenオプションに設定します。 詳細については--tokenのドキュメントを参照してください。 (例:--token "$BENCHER_API_TOKEN") - GitLab CI/CDの事前定義された変数を使用してMRブランチ名に
--branchオプションを設定します。 (例:--branch "$CI_COMMIT_REF_NAME")
🐰 おめでとうございます!GitLab CI/CDでBencherを使用する方法を学びました!🎉