将图像提交到 Main
您不能只将 SVG 图像从管道作业保存到主存储库。你需要做出承诺。这不仅会污染您的 git 历史记录并增加您的 repo,而且还可能触发一个新的管道,从而导致无限循环。
有一些方法可以绕过无限循环,例如通过控制哪些源/分支触发管道或在提交消息前加上[skip ci],但这可能会变得复杂并且可能不值得。事实上,GitLab 不能完全按照你的意愿去做,所以你必须在某个地方做出妥协。
从工件生成指标图
您可以在 CSV 文件中收集来自过去管道的指标并将其保存为工件。
将此添加到名为 add_metrics.sh 的可重用脚本中:
#!/bin/bash
HTTP_HEADER="PRIVATE-TOKEN: $YOUR_ACCESS_TOKEN"
URL_START="https://gitlab.example.com/api/v4/projects/$CI_PROJECT_ID/jobs/artifacts"
URL_END="raw/<path/to/artifact>/metrics.csv?job=$CI_JOB_NAME"
COLUMN_HEADERS=Date,Time,Branch,Commit SHA,Test Time(s),Code Coverage (%)
# download latest artifact
if curl --location --header $HTTP_HEADER $URL_START/$CI_COMMIT_BRANCH/$URL_END
then echo "Feature branch artifact downloaded."
elif curl --location --header $HTTP_HEADER $URL_START/master/$URL_END
then echo "Master branch artifact downloaded."
else echo $COLUMN_HEADERS >> metrics.csv
fi
# add data sample row to CSV
NOW_DATE=$(date +"%F")
NOW_TIME=$(date +"%T")
echo $NOW_DATE,$NOW_TIME,$CI_COMMIT_BRANCH,$CI_COMMIT_SHA,$TEST_TIME,$CODE_COVERAGE >> metrics.csv
# keep last 50 lines
echo "$(tail -50 metrics.csv)" > metrics.csv
然后从gitlab-ci.yml 的管道中调用它:
job_name:
script:
- TEST_TIME=10
- CODE_COVERAGE=85
- chmod +x add_metrics.sh
- bash add_metrics.sh
artifacts:
paths:
- metrics.csv
expire_in: 1 month
注意:您必须create a personal token 并将其添加到masked variable。我还将由您来填充数据指标,例如测试时间、代码覆盖率等。
代码说明
- 下载当前分支的latest artifact。
- 功能分支的第一次提交将找不到“最新”工件。如果发生这种情况,请从
master 下载最新的工件。
- 脚本第一次运行时,
master 甚至没有“最新”工件,因此请创建一个新的 CSV 文件。
- 将当前样本附加到 CSV 文件的末尾。删除旧样本以保留固定数量的数据点。您可以添加日期、管道 ID 和其他指标。
- 存储更新的工件。
- 要查看图表,请从 GitLab UI 下载工件并在电子表格应用中查看。
发布到页面
使用 Python(pandas、matplotlib),您可以生成绘图图像并将其从您的 master 分支管道发布到 Gitlab Pages。您可以在存储库中拥有引用相同图像文件名的静态 HTML 页面,并不断替换管道中的相同图像。您还可以添加更多有用的指标,例如代码覆盖率。