使用 Gitlab Pages 为项目的每个标记版本提供静态 html 页面

问题描述 投票:0回答:1

我有一个托管在自定义 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 下。部署环境也已创建,我可以单击“查看部署”(参见 gitlab deploy environment showing the ),但这样做时出现 404 错误。

如果有任何有关如何实现所描述目标的提示,我将不胜感激。

PS:这听起来可能与为不同分支部署 GitLab 页面有关,但我认为事实并非如此。如果我错了请纠正我。

gitlab git-tag gitlab-pages
1个回答
0
投票

我们可以调整来自 GitLab Pages per Branch 的解决方案:不妥协的黑客服务预览页面以满足您的需求。

剩下 2 个(小)问题:

  • 页面空间不可能无限增长,但你的释放数量肯定会增长。因此,清理工作保留在解决方案中,当 GitLab 拒绝发布更多文件时,您将不得不手动使用它。
  • 缓存无法保证;当缓存消失或被清除时,您将不得不在最新版本的管道上再次启动
    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
© www.soinside.com 2019 - 2024. All rights reserved.