Gitlab CI + Git Flow:如何分离分支构建?

3

我开发了一个复杂的网络应用程序,采用git flow、Gitlab和CI管道来将测试版本部署到测试机器上,并将主版本部署到实时演示系统。

这两个系统的构建管道相同,只有不同的部署任务:

require:
  stage: require
  only:
    - develop
    - tags
  tags:
    - require
  script:
    - npm install

build:
  stage: build
  only:
    - develop
    - tags
  script:
    - grunt

deploy_testing:
  stage: deploy
  only:
    - develop
  script:
    - (...)

deploy_master:
  stage: deploy
  only:
    - tags
  script:
    - (...)

我现在进行Git Flow的hotfix,创建一个commit到我的develop分支和一个tagged commit到master。推送后,Gitlab CI将按照以下顺序运行作业:
  1. require(检出develop上的提交A)
  2. require(检出master上标记的提交B)
  3. build
  4. build
  5. deploy_testing
  6. deploy_master
遗憾的是只有一个runner,这意味着只有一个文件夹用于运行作业。这意味着步骤3将使用来自另一个分支(在步骤2中)的文件执行,以此类推。运行整个流水线后,测试系统包含与主/实时演练系统类似的状态,这完全不是我想要的。
我该如何保持这两个过程的分离? 我已经尝试了为developtags明确分别设置requirebuild作业,但效果不如预期。
是否有一种方法可以拥有不同的构建文件夹,或者强制Gitlab CI按不同的顺序运行作业而不需要来回切换?
1个回答

1
这份文档可以帮助你。 也许是一些类似这样的代码。
require:
  stage: require
  only:
    - develop
    - tags
  tags:
    - require
  script:
    - npm install

build_develop:
  stage: build
  only:
    - develop
  script:
    - grunt
  artifacts:
    paths:
    - folder_path_attached_to_deploy_job_develop

build_master:
  stage: build
  only:
    - tags
  script:
    - grunt
  artifacts:
    paths:
    - folder_path_attached_to_deploy_job_master

deploy_testing:
  stage: deploy
  only:
    - develop
  script:
    - (...)
  dependencies:
  - build_develop

deploy_master:
  stage: deploy
  only:
    - tags
  script:
    - (...)
  dependencies:
  - build_master

是的,看起来dependenciesartifacts是使这个工作的一种方法。 - Kelvin D
在我的情况下,这并没有发生,因为构件太大了,会使我的Gitlab实例充斥着几个GB的垃圾。我采取了一种不完全解决此问题的方法 - 现在我从不同时推送develop和标签。在推送标签之前,我会等待develop构建完成。 - Kelvin D
如果你的问题不是GitLab或Git Flow,那么就是你的应用程序有问题。也许你需要改变策略,将依赖项安装和构建放在Docker镜像中,并部署你的Docker镜像。 - Pacolotero

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接