为不同的分支部署GitLab页面

为不同的分支部署GitLab页面,git,gitlab,gitlab-pages,Git,Gitlab,Gitlab Pages,我正在使用GitLab页面部署我的React应用程序,它运行良好 这是我的gitlab ci.yml: # Using the node alpine image to build the React app image: node:alpine # Announce the URL as per CRA docs # https://github.com/facebook/create-react-app/blob/master/packages/react-scripts/template

我正在使用GitLab页面部署我的React应用程序,它运行良好

这是我的
gitlab ci.yml

# Using the node alpine image to build the React app
image: node:alpine

# Announce the URL as per CRA docs
# https://github.com/facebook/create-react-app/blob/master/packages/react-scripts/template/README.md#advanced-configuration
variables:
  PUBLIC_URL: /
# Cache node modules - speeds up future builds
cache:
  paths:
  - client/node_modules

# Name the stages involved in the pipeline
stages:
- deploy

# Job name for gitlab to recognise this results in assets for Gitlab Pages
# https://docs.gitlab.com/ee/user/project/pages/introduction.html#gitlab-pages-requirements
pages:
  stage: deploy
  script:
    - cd client
    - npm install # Install all dependencies
    - npm run build --prod # Build for prod
    - cp public/index.html public/404.html # Not necessary, but helps with https://medium.com/@pshrmn/demystifying-single-page-applications-3068d0555d46
    - mv public _public # CRA and gitlab pages both use the public folder. Only do this in a build pipeline.
    - mv build ../public # Move build files to public dir for Gitlab Pages
  artifacts:
    paths:
    - public # The built files for Gitlab Pages to serve
  only:
    - master # Only run on master branch
现在,我刚刚基于我的分支创建了一个dev版本
develope

我想有2个版本的我的反应应用程序与2个不同的网址。我该怎么做

例如,现在,我有:

my react app.com
链接到
master
分支

我该怎么办


dev.my-react-app.com
甚至
my-react-app.gitlab.io
链接到
develope
分支?

每个gitlab项目最多可以有一个站点页面。我找不到这方面的明确参考,但是说:

请注意,页面在默认情况下是不可知分支/标记的,它们的部署完全依赖于您在
.gitlab ci.yml
中指定的内容。如果不使用限制
页面
作业,则每当将新提交推送到任何分支或标记时,页面都将被覆盖


如果不使用
only
参数,则任何分支的更新都会发布到同一页面站点,覆盖其中的任何内容。使用
only
参数,只有提供的分支将触发页面生成。

我已经成功地使用了可浏览工件来实现此目的。在您的示例中,您将为开发分支创建一个作业,并将
PUBLIC\u URL
设置为
gitlab.io
上发布作业工件的路径:

开发:
人工产品:
路径:
-公开的
环境:
名称:开发
url:“https://$CI\u PROJECT\u NAMESPACE.gitlab.io/-/$CI\u PROJECT\u NAME/-/jobs/$CI\u JOB\u ID/artifacts/public/index.html”
脚本:|
#随便
阶段:部署
变量:
PUBLIC\u URL:“/-/$CI\u项目名称/-/jobs/$CI\u作业ID/artifacts/PUBLIC”
如图所示设置
环境
,将在相关合并请求中生成一个»Review app«链接,允许您只需单击一下即可访问工件


注意:如果您的存储库位于中,则需要将子组名称插入上方
/-/
$CI_PROJECT_name
之间的两个位置,以使生成的URL正常工作。

可以为不同的管道/分支发布多个页面

为此,您需要将页面内容(基本上是测试报告,或任何需要发布的内容)复制到公用文件夹中特定的唯一目录。 例如,目录的名称可以是管道的id(CI_pipeline_id)。因此,页面源的路径类似于public/$CI\u PIPELINE\u ID/

然后,应将整个公用文件夹定义为具有特定唯一名称的工件(这里再次使用“$CI_PIPELINE_ID”)

需要工件的唯一名称,以避免在下一次管道执行时覆盖工件(如果未指定名称,将采用默认名称)

然后,您可以通过以下链接访问已发布的报告:

https://yourGitlab/yourNamespace/yourProjectName/{CI_PIPELINE_ID}/index.html
,, 这意味着您可以通过更改管道id来访问所有保存的报告

我的例子是:

stages:
  - publish

cache:
  # Required to keep artifacts from old builds, e.g. from master
  paths:
    - public

pages:
  stage: publish
  script:
    - mkdir -p public/$CI_PIPELINE_ID
    - cp target/site/allure-maven-plugin/* public/$CI_PIPELINE_ID/ -R
  artifacts:
    name: "$CI_PIPELINE_ID"
    paths:
      - public
    expire_in: 5 days
  when: always

你能在GitLab回购协议中发布一个链接吗?这似乎对我不起作用:嗨,我不能发布回购的链接,因为它是私人的。你能试着和我建议的完全一样吗(我的意思是把文件夹结构复制到公共文件夹)?因为我知道你们是用其他方式做的对不起,伙计们,我只是错过了管道文件中的一小段代码:
cache:path:-public
所以,请添加它,我希望它能工作。我在这里测试了我的回购协议,所以你可以检查。结果是。我更新了回复。关于您的解决方案,它确实可以通过巧妙地使用GitLab缓存来工作。。。但这是一个肮脏的解决方案,因为它不是基于GitLab页面上已有的内容。如果缓存已清理或过期(企业通常会设置过期时间),则会丢失所有内容。。我建议改为看一看。:)@阿尔瓦罗·科斯塔:如果你的项目是公开的,你可以向全世界公布你的结果,那么它就会起作用。否则,如果你不能打开你的网页到互联网(像在我的情况下),所以这不是一个方便的解决方案。不管怎样,选择最适合你的:)太好了!它实际上消除了部署GitLab页面的任何需要,谢谢你的提示,我投你一票!我不确定这是否在所有情况下都有效,特别是当回购协议位于子组中时,这会改变
$CI\u ENVIRONMENT\u URL
的模式。有关更多详细信息,请参阅。您可以共享包含此内容的公共回购吗?@KarlAnthonyBaluyot先前的评论者使用了此技术,尽管对子组中的项目稍作修改。这对你有帮助吗?是的,谢谢@joki。您是否尝试过在开发分支gitlab页面上使用自定义域?您是否实现了开发分支的自定义域,如
dev.my-react-app.com