我有一个托管在自定义 gitlab 实例上的代码项目。该项目是子组的一部分。我们希望使用 Gitlab Pages 托管由 doxygen 和类似工具生成的静态 html 内容。简单的例子效果很好,所以我相信可以肯定地得出结论,一般的 gitlab + gitlab 页面设置很好。
现在我想为每个标记的软件版本发布专用的 html 页面。这是因为我们使用 git 标签来标记版本,并且对于每个版本,相关代码文档都应持续可用。
这是我尝试实现此目的的 .gitlab-ci.yml 文件:
image: alpine:latest
pages:
stage: deploy
script:
- mkdir public
# Provide a sample "html" page instead of running doxygen
- echo $CI_PAGES_URL > public/index.html
artifacts:
paths:
- public
# Desperate attempt:
environment:
name: $CI_COMMIT_REF_SLUG
url: $CI_PAGES_URL/$CI_COMMIT_REF_SLUG
only:
- tags
作为 gitlab 运行程序执行此脚本的结果,页面被发布,但在“主”项目页面 URL 下,而不是在与标签名称/“commit ref slug”相关的专用 URL 下。部署环境也已创建,我可以单击“查看部署”(参见 ),但这样做时出现 404 错误。
如果有任何有关如何实现所描述目标的提示,我将不胜感激。
PS:这听起来可能与为不同分支部署 GitLab 页面有关,但我认为事实并非如此。如果我错了请纠正我。
我们可以调整来自 GitLab Pages per Branch 的解决方案:不妥协的黑客服务预览页面以满足您的需求。
剩下 2 个(小)问题:
pages
作业。pages:
stage: build
image: alpine:3.18
cache:
key: gitlab-pages
paths: [public]
before_script:
# default available 'tree' app in alpine image does not work as intended
- apk add tree
- mkdir -p public/$CI_COMMIT_REF_SLUG && ls public
- rm -rf public/$CI_COMMIT_REF_SLUG || true # remove last version of current tag
script:
- ./generate-my-html.sh --output build-docs || true # insert here your code that generates documentation
- mv --verbose build-docs public/$CI_COMMIT_REF_SLUG
- cd public
- tree -d -H '.' -L 1 --noreport --charset utf-8 -T "Releases" -o index.html # generate a root HTML listing all releases for easier access
artifacts:
paths: [public]
expire_in: 1h
rules:
- if: $CI_COMMIT_TAG
pages-clean-release:
stage: build
image: alpine:3.18
cache:
key: gitlab-pages
paths: [public]
variables:
FOLDER_TO_DELETE: $CI_COMMIT_REF_SLUG # an indirection to allow arbirtraty deletion when launching this job
script:
- rm -rf public/$FOLDER_TO_DELETE
when: manual
rules:
- if: $CI_COMMIT_TAG