我正在尝试将静态网站的多个版本部署到 GitLab CI/CD 中的
public
的 GitLab 页面。
我的策略是在路径中包含标签或分支名称,例如
pages.foo.com/project/main/site.html
(分行)pages.foo.com/project/latest/site.html
(标签)pages.foo.com/project/v42.1/site.html
(标签)所以我给自己定义了一个变量
DEPLOY_DIR
,它可以设置为 $CI_COMMIT_TAG
或 $CI_COMMIT_BRANCH
,使用 CI/CD 的 rules
与 if
结合使用。
变量本身工作正常,并且站点被复制到正确的目的地。
但是,GitLab 页面似乎只保留“最新”构建管道的结果。尽管“网络服务器”页面上的目标文件夹彼此完全不同,但先前管道产生的工件已完全“消失”。 所以,例如:
提交并推送到分支
main
public/main/site.html
pages.foo.com/project/main/site.html
工作正常标签
v42.1
public/v42.1/site.html
pages.foo.com/project/v42.1/site.html
工作正常pages.foo.com/project/main/site.html
已.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"
rules:
- if: $CI_COMMIT_TAG != null
variables:
DEPLOY_DIR: $CI_COMMIT_TAG
- if: $CI_COMMIT_BRANCH != null
variables:
DEPLOY_DIR: $CI_COMMIT_BRANCH
script:
- export
- echo "deploy dir $DEPLOY_DIR"
- mkdir -p "public/$DEPLOY_DIR"
- cp -v build/html5/*.html "public/$DEPLOY_DIR"
artifacts:
name: "$CI_PIPELINE_ID"
expire_in: never
paths:
- public
artifacts.name
和
artifacts.expire_in
,但似乎都没有任何效果。
在 GitLab.com 免费套餐中,每个 GitLab 项目只能拥有一个页面站点。您上传到工件中公共文件夹的任何内容都将覆盖以前存在的内容,因此您会遇到此行为。
在自我管理的 GitLab 上,默认情况下此功能不可用。为了使其可用,管理员可以启用名为pages_multiple_versions_setting 的功能标志。在 GitLab.com 上,此功能不可用。此功能尚未准备好用于生产使用。
选择左侧项目菜单上的->
Deploy
Feature flags
:
设置pages_multiple_versions_setting
功能标志:
.gitlab-ci.yml
范围内配置路径前缀。您可以在
此 GitHub 页面上找到示例和详细信息 在您的情况下,您应该使用以下部分扩展您的
pages
部分:
pages:
path_prefix: "$DEPLOY_DIR"
注:
此功能尚未准备好投入生产。您可以关注此票证中的功能状态:https://gitlab.com/gitlab-org/gitlab/-/issues/422145
pages_multiple_versions_setting
详细帮助 -
https://docs.gitlab.com/ee/user/project/pages/
但是,如果您在 gitlab.com 上,您将看不到此功能。
或者,如果文件名被覆盖,您可以在 .yaml 中使用此 hotfix来使用时间戳保存文件。
export LATESTBUID=$(date +%d-%m-%y-%H-%M-%s) && mkdir -r /tmp/$LATESTBUID && <copy/create your build at this path> /tmp/$LATESTBUID
Note :
您也可以使用附加环境名称来获取更多描述