GitLab CI如何将Allure报告存至其他分支并配置保留规则
GitLab CI 存储Allure报告相关问题解答
1. 存储Allure文件到独立Pages分支的实现步骤
- 前置准备
- 在仓库中创建名为
pages的孤儿独立分支(无业务代码提交历史),进入项目「设置-Pages」,将Pages发布源设置为pages分支、发布目录为public。 - 确认CI作业拥有仓库推送权限:项目「设置-CI/CD-令牌」中,确保CI内置的
CI_JOB_TOKEN具备代码写权限,无需额外配置私人令牌。
- 在仓库中创建名为
- 调整
.gitlab-ci.yml配置,核心逻辑为测试阶段产出allure结果和报告,部署阶段拉取pages分支现有内容,将新产出的报告文件写入后推送回pages分支,参考配置如下:
stages: - testing - deploy docker_job: stage: testing tags: - docker image: atools/chrome-headless:java11-node14-latest before_script: - npm ci - npx playwright install - npm install allure-commandline --save-dev script: - npm run testfile after_script: - npx allure generate allure-results -o allure-report --clean rules: - when: always allow_failure: false artifacts: when: always paths: - ./allure-report - ./allure-results # 把原始结果也加入制品,传递到下游部署阶段 expire_in: 1 day pages: stage: deploy image: alpine/git:latest # 使用带git环境的镜像执行分支操作 before_script: # 配置git提交身份 - git config --global user.name "GitLab CI Bot" - git config --global user.email "ci-bot@example.com" # 克隆独立pages分支到本地工作目录 - git clone --branch pages --single-branch ${CI_REPOSITORY_URL} pages-repo script: # 清理旧的最新版报告,保留历史归档内容 - rm -rf pages-repo/public/latest - mkdir -p pages-repo/public/latest - mkdir -p pages-repo/public/results/${CI_PIPELINE_ID} # 新报告存到latest固定路径,原始测试结果按流水线ID单独归档 - cp -r ./allure-report/* pages-repo/public/latest/ - cp -r ./allure-results/* pages-repo/public/results/${CI_PIPELINE_ID}/ # 提交变更推送到pages分支 - cd pages-repo - git add . - git commit -m "chore: update allure report for pipeline ${CI_PIPELINE_ID}" || echo "No changes to commit" - git push origin pages rules: - when: always
2. 保留Allure历次运行历史的配置方法
完全可以实现,Allure本身的历史趋势、用例历史状态功能,就依赖历史history文件夹和历史结果集,只需要在现有配置基础上补两个逻辑即可:
- 在测试作业生成新报告前,先拉取上一次存在pages分支里的
allure-report/history目录,复制到当前次运行的allure-results目录下,再执行allure generate命令,新生成的报告就会自动整合历史数据,展示趋势曲线、用例历史执行状态。对应可以在docker_job的before_script末尾加如下命令:
# 拉取上一次报告的history文件用于生成趋势,首次运行无历史文件时不中断流程 - git clone --branch pages --single-branch --depth 1 ${CI_REPOSITORY_URL} temp-pages - mkdir -p allure-results/history - cp -r temp-pages/public/latest/history/* allure-results/history/ || true - rm -rf temp-pages
- 部署作业推送内容时,不要全量清空pages分支的旧内容,按照前面参考配置的逻辑,把每次的
allure-results按流水线ID单独归档存到分支里,同时把最新的报告放到固定的latest目录,既可以保留全量历次运行信息,也不会影响Pages访问最新报告。git add .只会提交变更内容,之前存的历史归档不会被覆盖删除。
3. 制品保留规则说明
- 要让CI作业制品保留指定N天,直接修改作业下
artifacts.expire_in的取值即可,支持天、周、月等单位,比如要保留30天就写expire_in: 30 days。 expire_in配置生效后,GitLab会自动清理超过保留时长的作业制品,不需要手动操作。两个特殊规则需要注意:- 即便是配置了
when: always的制品,到期后照样会被自动删除,只有手动在流水线页面标记为「永久保留」的制品,才不会被过期清理。 - 前面提到的推送到
pages分支存储的报告和结果集,属于仓库代码存储范畴,不属于CI临时制品,不受expire_in规则约束,会永久保存在分支中。如果要控制这部分内容的保留时长,额外写一个定时CI作业,定期删除pages分支里超过留存期限的历史归档目录即可。
- 即便是配置了
内容的提问来源于stack exchange,提问作者Vlad Easy
相关产品推荐
相关产品推荐

