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

GitLab CI/CD部署多版本静态页:旧产物被清除问题求助

问题分析

你遇到的核心问题是GitLab Pages的部署机制是完全覆盖式:每次pages任务执行完成后,GitLab会用该任务生成的public目录,直接替换线上Pages站点的全部内容。哪怕你每次只新增一个版本子目录,旧版本的内容也会因为不在新的public目录里而被清除,导致旧路径返回404。

你尝试的artifacts.name和expire_in仅控制CI产物的存储周期与命名,完全不影响Pages的部署逻辑,所以无法解决问题。


解决方案

最可靠的方式是用一个专门分支维护所有版本的Pages内容,确保每次部署时都包含历史版本的文件:

修改后的.gitlab-ci.yml配置

stages:
  - build-pdf
  - deploy-html

default:
  tags:
  - small

build-pdf-doctoolchain:
  stage: build-pdf
  artifacts:
    paths:
      - build/pdf/*.pdf
      - build/html5/*.html
  image: doctoolchain/doctoolchain:v3.2.2
  script:
    - doctoolchain . generatePDF generateHTML

pages:
  stage: deploy-html
  variables:
    DEPLOY_DIR: "default"
    # 用于存储所有Pages版本内容的专门分支
    PAGES_CONTENT_BRANCH: "pages-content"
  rules:
    - if: $CI_COMMIT_TAG != null
      variables:
        DEPLOY_DIR: $CI_COMMIT_TAG
    - if: $CI_COMMIT_BRANCH != null
      variables:
        DEPLOY_DIR: $CI_COMMIT_BRANCH
  script:
    # 配置Git身份,用于提交推送
    - git config --global user.name "GitLab CI/CD"
    - git config --global user.email "$GITLAB_USER_EMAIL"
    
    # 拉取专门的Pages内容分支,首次运行则创建空目录
    - git clone -b $PAGES_CONTENT_BRANCH --depth 1 $CI_REPOSITORY_URL public || mkdir -p public
    
    # 创建当前版本的目录并复制构建产物
    - mkdir -p "public/$DEPLOY_DIR"
    - cp -v build/html5/*.html "public/$DEPLOY_DIR"
    
    # 提交并推送更新到内容分支
    - cd public
    - git add .
    # 如果没有文件变化则跳过提交
    - git commit -m "Deploy version: $DEPLOY_DIR" || echo "No changes to commit"
    - git push origin $PAGES_CONTENT_BRANCH
  artifacts:
    paths:
      - public

配置注意事项

  1. 权限设置:需要给CI Runner配置仓库推送权限,可以在项目Settings > CI/CD > Variables中添加GITLAB_USER_EMAIL变量;或者使用项目部署令牌(Deploy Token),替换克隆命令中的$CI_REPOSITORY_URL为包含令牌的地址。
  2. 分支初始化:首次运行前需要手动创建pages-content分支(可以是一个空分支)。

替代方案(不推荐)

如果不想维护专门分支,也可以通过GitLab API下载历史流水线的pages产物,合并到当前public目录后再部署。但这种方式需要追踪所有已部署的版本,随着版本增多会越来越慢,维护成本极高,仅适合临时场景。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.29 20:05:23