GitLab Merge Requests差分指标报告实现问题咨询
GitLab MR差分指标报告(包体积对比)实现方案
不少开发者已经落地过这个功能,核心逻辑是在CI流水线中拉取目标分支的metrics文件,和当前分支的文件做对比后,把差异结果输出到MR评论或GitLab的指标面板里。以下是具体实现步骤:
拉取目标分支的metrics文件
在CI任务中,借助GitLab内置变量获取MR的目标分支名,拉取对应分支的metrics文件并改名避免覆盖:# 仅在MR触发的流水线中执行 if [ -n "$CI_MERGE_REQUEST_TARGET_BRANCH_NAME" ]; then # 拉取目标分支的metrics.txt git fetch origin $CI_MERGE_REQUEST_TARGET_BRANCH_NAME git checkout origin/$CI_MERGE_REQUEST_TARGET_BRANCH_NAME -- metrics.txt # 重命名为target_metrics.txt mv metrics.txt target_metrics.txt # 切回当前分支 git checkout - fi编写指标对比脚本
以包体积为例,假设metrics.txt格式为package_size 123456(符合GitLab metrics规范),用Shell脚本生成差异报告:#!/bin/bash CURRENT_SIZE=$(grep "package_size" metrics.txt | awk '{print $2}') TARGET_SIZE=$(grep "package_size" target_metrics.txt | awk '{print $2}') DIFF=$((CURRENT_SIZE - TARGET_SIZE)) PERCENT_DIFF=$(echo "scale=2; $DIFF / $TARGET_SIZE * 100" | bc) # 生成Markdown格式的差异报告 cat > diff_report.md << EOF ## 包体积差异对比 - 目标分支体积: $TARGET_SIZE bytes - 当前分支体积: $CURRENT_SIZE bytes - 差异: $DIFF bytes ($PERCENT_DIFF%) EOF将差异结果推送到MR评论
用GitLab API把报告作为评论添加到当前MR,需要提前在项目CI变量中配置带API权限的GITLAB_API_TOKEN:curl --request POST \ --url "$CI_API_V4_URL/projects/$CI_PROJECT_ID/merge_requests/$CI_MERGE_REQUEST_IID/notes" \ --header "PRIVATE-TOKEN: $GITLAB_API_TOKEN" \ --header "Content-Type: application/json" \ --data "{\"body\": \"$(cat diff_report.md)\"}"(可选)集成到GitLab指标面板
如果想让差异值出现在GitLab的Metrics Report面板中,把差异输出为规范metrics格式,再在.gitlab-ci.yml中配置:echo "package_size_diff $DIFF" >> metrics_diff.txtmetrics_diff_report: stage: report artifacts: reports: metrics: metrics_diff.txt only: - merge_requests
你也可以在GitLab官方CI模板库中找到现成的指标对比模板,直接复用简化开发。
内容的提问来源于stack exchange,提问作者Pierluigi Vernetto
相关产品推荐
相关产品推荐

