14

我正在使用 GitLab 管道来运行一些测试并生成覆盖率报告。

我想做的是能够将生成的覆盖文件夹(包括一个 html 页面和一个src文件夹)发布到一些内部 GitLab 静态页面,一些团队成员可以查看。

我知道gitlab pages的概念,但是这些步骤表明我必须为此目的使用静态站点生成器。

我的问题如下:

  • 这个概念只有在 GitLab 官方网站上发布时才gitlab.io可用(my.local.gitlab.server/mynamespace/thepagesproject

  • 我可以只上传一个index.html包含其内容文件夹的文件并使其可以访问吗?

  • 使用现有项目的最佳方式是什么,以便向其中添加一些 html 页面(理想情况下,我想避免为此目的创建一个新项目)

4

1 回答 1

16

我可以在自托管实例上使用 GitLab 页面吗?

是的,GitLab Pages 适用于自托管实例。*.pages.<your-gitlab-domain-name>如果您仅通过 https 运行 gitlab,您可能需要为 注册通配符域名,并生成 SSL 证书。

拥有域后,编辑/etc/gitlab/gitlab.rb并添加额外的设置,然后运行(如果您仅通过 http 运行,gitlab-ctl reconfigure请忽略设置:pages_nginx

gitlab_pages['enable'] = true
pages_external_url "https://pages.<your-gitlab-domain-name>"
pages_nginx['redirect_http_to_https'] = true
pages_nginx['ssl_certificate'] = "/etc/gitlab/ssl/pages.<your-gitlab-domain-name>.crt"
pages_nginx['ssl_certificate_key'] = "/etc/gitlab/ssl/pages.<your-gitlab-domain-name>.key"

完成后,您将能够通过以下方式访问每个项目的页面<group>.pages.<your-gitlab-domain-name>/<project>

我可以上传任何我想要的页面吗?

是的。每个 GitLab CI 作业都可以通过将内容写入public文件夹并注册public为工件目录来创建要在 GitLab 页面中发布的内容。最终pages作业应该添加到 CI 管道中,这会导致页面内容被发布(覆盖之前存在的任何内容)。目录的所有内容public都将通过<group>.pages.<your-gitlab-domain-name>/<project>URL 提供,这意味着您可以完全控制内容。

请注意,CI 中的 pages 作业不需要任何脚本,它只需要与作业名称“pages”一起出现。这是一个触发页面发布的神奇作业名称。您可能希望添加作业限制,以便仅在主分支管道上运行。

我可以将页面发布添加到现有项目吗?

是的。创建您要发布的内容的任何步骤都应将内容写入public子目录,并将该public目录注册为工件目录。

my job:
  stage: build
script:
  - echo "Do some things and write them to public directory" > public/index.html
artifacts:
  paths:
  - public
    expire_in: 2 weeks

注意:我喜欢添加expire_in: 2 weeks以限制保留工件的时间长度。页面发布后,就不再需要这些工件了。

最后,您需要添加一个pages作业来触发页面发布:

# This job does nothing but collect artifacts from other jobs and triggers the pages build
# The artifacts are picked up by the pages:deploy job.
pages:
  stage: deploy
  script:
    - ls -l public
  artifacts:
    paths:
      - public
  only:
    - master

通常您只想在 master 分支上发布,但您可以自由选择何时发布页面运行。重要的是要注意,当页面发布运行时,它将完全替换以前发布的任何内容,因此您不能附加到现有内容(尽管有一些技巧可以让您实现类似的东西)。

于 2018-08-20T18:59:07.863 回答