You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.28 18:09:27