我正在使用gitlab
管道来运行一些测试并生成覆盖率报告。
我想要做的是能够将生成的coverage文件夹(包括html页面和src
文件夹)发布到某个内部gitlab
静态页面,供一些团队成员查看。
我知道gitlab pages概念,但步骤表明我必须为此目的使用静态站点生成器。
我的问题如下:
是仅在官方gitlab网站(gitlab.io
)上发布时才可使用的概念,或者我是否可以使用我的on gitlab
安装(即我的网页可用于{ {1}})?
我可以上传一个my.local.gitlab.server/mynamespace/thepagesproject
文件及其内容的文件夹并使其可以访问吗?
使用 EXISTING 项目的最佳方式是什么,以便只添加一些html页面(理想情况下我想避免为此创建一个新项目目的)
答案 0 :(得分:8)
是的,GitLab页面可以在自托管实例上运行。如果仅通过https运行gitlab,则可能需要注册*.pages.<your-gitlab-domain-name>
的通配符域名并生成SSL证书。
拥有域后,编辑/etc/gitlab/gitlab.rb
并添加其他设置,然后运行gitlab-ctl reconfigure
(如果仅通过http运行,请忽略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分支上发布,但是可以自由选择何时运行页面。重要的是要注意,当页面发布运行时,它将完全替换以前发布的任何内容,因此您不能追加到现有内容上(尽管有些黑客可以使您实现类似的目的)。