【问题标题】:Gitlab .gitlab-ci.yml file different in branchesGitlab .gitlab-ci.yml 文件在分支中不同
【发布时间】:2018-08-30 20:24:50
【问题描述】:

我的情况是,我们在 master 中有 .gitlab-ci.yml,这在分支“开发”中是不同的,问题是我们有很多带有很多分支的 repos。

我想对 .gitlab-ci.yml 进行更改,但我想确保所有分支都使用相同的 .gitlab-ci.yml。我知道 gitlab 的设计让你为你的分支拥有不同的 CI CD,因为你的管道可能不同。

一种方法是获取所有分支的所有 repos,然后将相同的 .gitlab-ci.yml 复制到所有 repos 和分支。

你知道一些更好的方法吗?

【问题讨论】:

  • 不确定是否有更好的方法,但如果你这样做,最好将cherry-pick 提交到其他分支而不是仅仅复制它们......
  • 我们通常认为开发分支中的 .gitlab-ci.yml 有一天会因为工作流的原因在 master 分支中合并。所以我们不必费心在每个分支中同步 CI 配置。我知道它不能回答您的问题,但也许您毕竟不必在所有分支中同步您的 CI 配置......还要考虑如果您的 CI 使用脚本,则开发 CI 不能适用于其他分支。

标签: gitlab gitlab-ci


【解决方案1】:

您可以使用include 关键字。它允许您包含来自远程 URL 的文件或包含管道的 special project。例如,您可以创建大量“隐藏”模板prefixing them with .,然后根据需要使用extends 关键字将它们包含到您的管道中。这还允许您使用变量配置管道模板。

注意:包含在创建管道时执行。因此,无法通过修复包含文件来修复创建管道后的管道。

旧答案:

如果您使用企业版,则可以使用include 关键字。

如果您使用的是社区版,我能想到的最佳选择是拥有 check-yaml 工作。它基本上运行git diff master -- .gitlab-ci.yml[1]。如果分支和 master 上的 .gitlab.yml 不同,则作业将失败,迫使您更新分支。虽然这不会使您的管道自动保持同步,但转移不会被忽视。

[1]:您可能需要运行git fetch master,具体取决于您的git strategy

【讨论】:

    【解决方案2】:

    也许您可以使用 .gitlab-ci.yml 的默认文件夹 git submoduleschange

    【讨论】:

      【解决方案3】:

      我知道 .gitlab-ci.yml 在分支中可能会有所不同,因为您的 Prod CI 可能与其他分支中的“Dev/Test”不同,因此在不同的分支中有不同的 .gitlab-ci.yml 文件是正常的分支,所以我们的开发团队将 master 与他们的分支合并并从那里开始更改。

      这个想法是,当您想进行“全球”更改时,这取决于您将如何处理。

      【讨论】:

        【解决方案4】:

        您只能在外部存储库中为所有分支配置文件 .gitlab-ci.yml。

        您转到存储库 --> 设置 --> 常规管道 --> CI/CD 配置文件。

        当您在任何分支上进行更改时,此文件将从存储库下载并应用。在作业上,您必须配置“仅:-”才能在此分支上执行此作业。

        【讨论】:

          猜你喜欢
          • 2021-11-11
          • 2020-09-13
          • 1970-01-01
          • 1970-01-01
          • 2019-02-08
          • 2021-08-15
          • 1970-01-01
          • 2022-01-08
          • 2021-11-13
          相关资源
          最近更新 更多