【问题标题】:Gitlab CI + Git Flow: How to separate branch builds?Gitlab CI + Git Flow:如何分离分支构建?
【发布时间】:2018-08-30 12:25:43
【问题描述】:

我开发了一个复杂的 Web 应用程序,使用 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 修补程序,在我的 develop 分支上创建一个提交,并在 master 上创建一个标记提交。推送后,Gitlab CI 会按以下顺序运行作业:

  1. require(检查develop 上的提交 A)
  2. require(在 master 上签出标记的提交 B)
  3. build
  4. build
  5. deploy_testing
  6. deploy_master

遗憾的是只有一个运行器,这意味着只有一个文件夹运行作业。这意味着,第 3 步将使用第 2 步中的文件执行,该文件位于不同的分支上 , 等等。 运行整个管道后,测试系统包含与主/实时登台系统相似的状态,这根本不是我想要的。

我怎样才能使这两个进程分开? 我已经为developtags 明确地尝试了单独的requirebuild 作业,但这并没有按预期工作。

有没有办法拥有不同的构建文件夹,或者强制 Gitlab CI 在没有 ping pong 的情况下以不同的顺序运行作业?

【问题讨论】:

    标签: git continuous-integration gitlab gitlab-ci gitlab-ci-runner


    【解决方案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 是完成这项工作的一种方式。
    • 在我的情况下它没有,因为工件太大并且会用千兆字节的垃圾弄乱我的 Gitlab 实例。我没有完全解决这个问题 - 现在我从不将develop 和标签放在一起。在推送标签之前,我会等到 develop 构建完成。
    • 那么您的问题不是 gitlab 或 git flow,而是您的应用程序。也许你需要改变你的策略,在 docker 镜像中安装和构建你的 deps 并部署你的 docker 镜像
    猜你喜欢
    • 2021-05-12
    • 2021-07-05
    • 2018-03-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多