如何在 GitLab CI/CD 中使用 Bencher
根据您的使用案例,您可以在 GitLab CI/CD 中为您的以下项设置持续基准测试:
确保在继续之前已创建 API token并将其设置为名为 BENCHER_API_TOKEN
的屏蔽变量!导航到 Your Repo -> Settings -> CI/CD -> Variables -> Expand -> Add variable
。变量键应为 BENCHER_API_TOKEN
,变量值应为您的 API token。勾选 Protect variable
和 Mask variable
这两个选项。
目标分支
统计连续基准测试 的基石是为目标分支建立历史基线。这个历史基线可以用于检测合并请求中的性能回归。
- 创建一个 GitLab CI/CD 文件。
(例如:
.gitlab-ci.yml
) - 创建一个 GitLab CI/CD 作业。
(例如:
benchmark_target_branch
) - 当管道由
main
分支的push
触发时运行if
。 查看 GitLab CI/CDrules
文档 和 GitLab CI/CD 预定义变量文档 以获取完整概述。 (例如:rules: if: ...
) - 设置作业运行的
image
。 查看 GitLab CI/CDimage
文档 以获取完整概述。 (例如:image: debian:bullseye
) - 使用 便捷脚本 安装 Bencher CLI。
(例如:
before_script: ...
) - 使用
bencher run
CLI 子命令运行您的main
分支基准测试。 查看 thebencher run
CLI 子命令 以获取完整概述。 (例如:bencher run
) - 将
--project
选项设置为项目 slug。 查看 the--project
文档 以获取更多详情。 (例如:--project save-walter-white-1234abcd
) - 将
--token
选项设置为已屏蔽的BENCHER_API_TOKEN
环境变量。 查看 the--token
文档 以获取更多详情。 (例如:--token "$BENCHER_API_TOKEN"
) - 将
--branch
选项设置为分支名称。 查看 the--branch
文档 以获取完整概述。 (例如:--branch main
) - 将
--testbed
选项设置为测试平台名称。 这可能应与在image
中选择的机器匹配。 查看 the--tested
文档 以获取更多详情。 (例如:--testbed debian:bullseye
) - 为
main
分支、debian:bullseye
测试平台和latency
测量设置阈值:- 将
--threshold-measure
选项设置为bencher mock
生成的内置latency
测量。 查看 the--threshold-measure
文档 以获取更多详情。 (例如:--threshold-measure latency
) - 将
--threshold-test
选项设置为 Student’s t-test (t_test
)。 查看 the--threshold-test
文档 以获取完整概述。 (例如:--threshold-test t_test
) - 将
--threshold-max-sample-size
选项设置为最大样本大小64
。 查看 the--threshold-max-sample-size
文档 以获取更多详情。 (例如:--threshold-max-sample-size 64
) - 将
--threshold-upper-boundary
选项设置为上界0.99
。 查看 the--threshold-upper-boundary
文档 以获取更多详情。 (例如:--threshold-upper-boundary 0.99
) - 设置
--thresholds-reset
标志以确保只有指定的阈值处于活动状态。 查看 the--thresholds-reset
文档 以获取完整概述。 (例如:--thresholds-reset
)
- 将
- 设置
--err
标志以在生成警报时使命令失败。 查看 the--err
文档 以获取完整概述。 (例如:--err
) - 将
--adapter
选项设置为 Bencher Metric Format JSON (json
),由bencher mock
生成。 查看 benchmark harness adapters 以获取完整概述。 (例如:--adapter json
) - 指定基准测试命令参数。
查看 benchmark command 以获取完整概述。
(例如:
bencher mock
)
合并请求
为了捕捉合并请求中的性能回归,您需要在MRs上运行您的基准测试。 下面的例子应该仅用于相同存储库内的分支。
- 更新 GitLab CI/CD 文件。
(例如:
.gitlab-ci.yml
) - 创建一个 GitLab CI/CD 任务。
(例如:
benchmark_mr_branch
) - 当管道是由
merge_request_event
触发时运行if
。 请参阅 GitLab CI/CDrules
文档 和 GitLab CI/CD 预定义变量文档了解完整概览。 (例如:rules: if: ...
) - 设置任务将运行的
image
。 请参阅 GitLab CI/CDimage
文档 了解完整概览。 (例如:image: debian:bullseye
) - 使用便捷脚本安装 Bencher CLI。
(例如:
before_script: ...
) - 使用
bencher run
CLI 子命令 运行您的合并请求分支的基准测试。 请参阅bencher run
CLI 子命令了解完整概览。 (例如:bencher run
) - 设置
--project
选项为项目slug。 请参阅--project
文档了解更多细节。 (例如:--project save-walter-white-1234abcd
) - 设置
--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
) - 设置
--start-point-reset
标志以始终重置MR分支到起始点。 这将防止基准数据漂移。 请参阅--start-point-reset
文档了解完整概览。 (例如:--start-point-reset
)
- 使用 GitLab CI/CD 预定义变量设置
- 设置
--testbed
选项为测试平台名称。 可能应该与在image
中选择的机器匹配。 请参阅--tested
文档了解更多细节。 (例如:--testbed debian:bullseye
) - 设置
--err
标志以便在生成警报时使命令失败。 请参阅--err
文档了解完整概览。 (例如:--err
) - 设置
--adapter
选项为 Bencher Metric Format JSON (json
),生成可通过bencher mock
。 请参阅基准测试接口适配器了解完整概览。 (例如:--adapter json
) - 指定基准测试命令参数。
请参阅基准测试命令了解完整概览。
(例如:
bencher mock
)
在 MR 关闭后清理 MR 分支,
您可以创建一个独立的作业,使用 GitLab API 查询 MR 状态。
如果状态是 closed
,该作业将使用 bencher archive
命令存档 MR 分支。
- 更新 GitLab CI/CD 文件。
(例如:
.gitlab-ci.yml
) - 创建一个 GitLab CI/CD 作业。
(例如:
archive_mr_branch
) - 在管道由
merge_request_event
触发时运行if
。 查看 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=$(...)
) - 使用
bencher archive
CLI 子命令存档 MR 分支 如果 MR 状态是closed
。 (例如:bencher archive
) - 设置
--project
选项为项目代号。 查看--project
文档 获取更多详情。 (例如:--project save-walter-white-1234abcd
) - 将
--token
选项设置为屏蔽的BENCHER_API_TOKEN
环境变量。 查看--token
文档 获取更多详情。 (例如:--token "$BENCHER_API_TOKEN"
) - 使用GitLab CI/CD 预定义变量将
--branch
选项设置为 MR 分支名称。 (例如:--branch "$CI_COMMIT_REF_NAME"
)
🐰 恭喜!您已学会如何在 GitLab CI/CD 中使用 Bencher!🎉
继续前进:基准测试概览 ➡
🤖 该文档由 OpenAI GPT-4 自动生成。 它可能不准确并且可能包含错误。 如果您发现任何错误,请在 GitHub 上提出问题.