为不同分支机构部署GitLab页面

时间:2019-04-09 15:54:49

标签: git gitlab gitlab-pages

我正在使用GitLab Pages部署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

现在,我刚刚基于我的分支develop

创建了一个开发版本。

我想要我的React应用程序有2个版本,并带有2个不同的URL。我该怎么办?

例如,现在我有:

my-react-app.com链接到master分支

我应该怎么吃

dev.my-react-app.com或什至my-react-app.gitlab.io链接到develop分支?

3 个答案:

答案 0 :(得分:5)

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

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

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

需要唯一的工件名称,以便在下一个管道执行时不覆盖工件(如果未指定名称,则默认名称为https://docs.gitlab.com/ee/ci/yaml/#artifactsname)。

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

bar

, 这意味着您可以通过更改管道ID来访问所有已保存的报告。

我的例子:

https://yourGitlab/yourNamespace/yourProjectName/{CI_PIPELINE_ID}/index.html

答案 1 :(得分:3)

为此目的,我已经成功使用了可浏览的工件。在您的示例中,您将为自己的development分支创建一个作业,并将PUBLIC_URL设置为发布该作业的工件的gitlab.io上的路径:

develop:
    artifacts:
        paths:
          - public

    environment:
        name: Develop
        url: "https://$CI_PROJECT_NAMESPACE.gitlab.io/-/$CI_PROJECT_NAME/-/jobs/$CI_JOB_ID/artifacts/public/index.html"

    script: |
        # whatever

    stage: deploy

    variables:
        PUBLIC_URL: "/-/$CI_PROJECT_NAME/-/jobs/$CI_JOB_ID/artifacts/public"

按指示设置environment会在相关的合并请求中产生一个»Review app«链接,使您只需单击即可进入工件。

答案 2 :(得分:1)

每个GitLab项目最多可以有一个Pages站点。我找不到对此的明确引用,但是the documentation for .gitlab-ci.yml说:

  

请注意,页面默认情况下与分支/标签无关,并且页面的部署仅取决于您在.gitlab-ci.yml中指定的内容。如果您不使用only parameter来限制pages作业,则每当新提交被推送到任何分支或标记时,页面都将被覆盖。

在没有only参数的情况下,将更新发布到 Same Pages站点的任何分支,覆盖其中的任何内容。使用only参数,只有提供的分支才会触发Pages构建。