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

GitLab Pipeline文件移动失效及Allure历史报告留存配置问题

问题根因

两条命令未达预期是GitLab CI运行机制和配置缺失共同导致的,核心问题有3个:

  • 跨Job文件隔离:GitLab CI每个Job运行在独立的临时容器中,文件系统默认不共享。docker_job生成的allure-report虽然配置了artifacts,但pagesJob没有声明依赖该artifacts,运行时根本拿不到测试阶段生成的报告文件。
  • 目录无持久化:本地创建的Docs文件夹如果没有提交到Git仓库、也没有配置跨Pipeline持久化策略,pagesJob启动时根本不存在这个目录,mv命令会直接触发No such file or directory错误。
  • 历史留存逻辑缺失:现有配置没有做旧报告自动清理,也没有做报告版本隔离,就算文件能正常复制,每次运行也会直接覆盖旧报告,无法留存历史版本。
可行实现方案

通过GitLab CI Cache持久化历史报告,显式声明跨Job依赖,加上时间戳做报告版本隔离,配合find命令自动清理过期文件即可实现需求,具体配置调整逻辑如下:

  • 给pagesJob添加依赖声明,拉取测试阶段生成的Allure报告artifact
  • 配置Cache持久化Docs目录,跨Pipeline存储历次报告
  • 每次运行时先清理Docs中超过留存期限的旧报告
  • 新报告存入带时间戳+Pipeline ID的独立子目录,避免覆盖历史版本
  • 补全目录自动创建逻辑,避免路径不存在报错
修正后的.gitlab-ci.yml配置
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:
    - npx playwright test
  
  after_script:
    - npx allure generate allure-results -o allure-report
  rules:
    - when: always
  allow_failure: true
  artifacts: 
    when: always
    paths:
      - ./allure-report
    expire_in: 1 day 

pages: 
  stage: deploy
  # 依赖测试阶段的artifact,拉取allure-report文件夹
  dependencies:
    - docker_job
  # 用cache持久化Docs目录,跨pipeline留存历史报告
  cache:
    key: allure-history-reports
    paths:
      - Docs/
    policy: pull-push # 启动时拉取旧cache,结束时上传新cache
  script:
    # 提前创建所需目录,-p参数保证目录已存在时不报错
    - mkdir -p public Docs/reports
    # 清理留存时间超过2天的旧报告
    - find Docs/reports -type d -mtime +2 -exec rm -rf {} \;
    # 生成当前次报告的独立存储路径,用时间戳+流水线ID命名避免重名覆盖
    - CURRENT_REPORT_PATH=Docs/reports/$(date +%Y%m%d%H%M%S)-pipeline-$CI_PIPELINE_ID
    - mkdir -p $CURRENT_REPORT_PATH
    # 移动新生成的报告到独立目录
    - mv ./allure-report/* $CURRENT_REPORT_PATH
    # 全量复制Docs下所有报告(历史+最新)到public目录
    - cp -R ./Docs/* public
    # 可选:把最新报告设为Pages根目录默认访问页,打开域名直接看到最新报告
    - cp -R $CURRENT_REPORT_PATH/* public/
  artifacts:
    paths:
      - public
  rules:
    - when: always
配置说明
  • 留存时长调整:如果需要修改报告留存时间,把find命令里的+2改成对应天数即可,比如要存3天就改成+3
  • Cache有效期:GitLab Cache默认留存时间跟随实例配置,脚本层已经做了过期清理,不需要额外配置Cache过期策略
  • 历史报告访问:所有历史报告会存在public/reports/路径下,访问你的GitLab Pages域名/reports/对应报告目录名即可查看历史版本,根路径默认打开最新一次的报告
  • 排查技巧:如果后续还有文件操作问题,直接在script最开头加ls -la命令打印当前目录结构,就能快速定位文件是否存在、路径是否正确

内容的提问来源于stack exchange,提问作者Vladeezy

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.29 01:15:39