Bamboo 在分支机构而不是开发机构(也称为条件构建)上构建计划

Bamboo build plan on branches but not on develop (aka conditional build)

这是跨分支实施条件构建的尝试,默认情况下不可能,因为 BAM-11257,自 2012 年开放,仍在等待中。

上下文:

已实施(无效)方法

这很好用,每个分支都有自己的基于所需行为的构建计划。但是,当将任何分支合并到 develop 时,这三个构建计划并行开始,因为它们三个的 "Repositories" 中都有 develop 作为原始分支条目。

问题:如何避免这种副作用?我们如何才能只为某些分支类型而不是原始分支(在本例中 develop)指定构建计划?


我了解 Bamboo 需要一个来源,根据特定策略(正则表达式)为其分支克隆新的构建计划,但是我们如何将其阻止到 运行 原始分支的构建计划出色地?或者,我们可以为分支 type 独立于其来源并基于动态名称(例如 feature-somethingfeature-bob)定义构建计划吗?

(关于最后一点:在 "Repository" 中我们可以指定一个分支作为起点,但这是一个静态值,我们不能在那里放置一个正则表达式,我想这将解决整个问题)

我也遇到过类似的问题。我发现的唯一解决方法是停止使用 "linked repositories"。不知道您是否熟悉这一点,但您可以使用适用于所有构建计划的 "linked repository",也可以专门为您的计划创建一个。 为了解决我的问题,我必须添加一个 "Git" 类型的存储库(即使我们使用 GitHub)。这让我可以将 "branch" 字段留空,从而解决我的问题。

编辑 事实上,我必须在此字段中指定一个 "wrong" 分支名称才能使其正常工作...

希望这对您有所帮助。 西蒙

如果前两个构建计划中包含字符串 "develop",您能否将正则表达式更改为不执行?

类似于这种负面前瞻的东西:^((?!develop).)*$

可以在 Bamboo 中为分支“types”定义构建计划,并且默认情况下不链接到其他分支。因此,Bamboo 计划配置仅适用于动态分支,没有默认分支 运行。

主要的误解来自以下几点:

  • 在计划配置的 "Repositories" 选项卡中,您可能会有一个 "BitBucket / Stash" 存储库,您可以在其中 select 您的存储库 也是一个分支,你必须,它是一个带有强制默认值的下拉框。这是这里的主要问题。此选项要求您为现有分支(例如 develop)定义一个构建计划,而您实际上希望为动态分支(例如尚未创建的功能分支)定义构建计划。
  • 然后,在 "Branches" 选项卡的 "Automatic Branch Management" 部分下,您确实可以 select 根据正则表达式的分支策略,以适应动态分支(例如 (?=(feature.*|bugfix.*)).*$ 我在上面提到过),构建计划将被相应地克隆,但主要问题是整个构建计划仍将 运行 在默认存储库的默认分支上,这是您通常不希望的.
  • 不过,在 "Branches" 选项卡中,您可以看到“计划分支允许您 运行 在 源存储库中的不同分支上构建 使用相同的计划配置。”。请注意粗体:分支策略应用于整个存储库中的分支,不是仅从您在存储库条目中定义的默认分支创建的分支,而是应用于存储库中的任何分支.
  • 那是转折点:因此您可以定义一个新的分支,平行于 masterdevelop,我们称它为 bamboo-management-branch,您甚至可以通过以下方式阻止其删除或更改Bitbucket,然后将此分支用作初始计划配置中默认存储库条目的默认分支。就是这样。现在,你有一个团队内没有人会使用的分支,一个永远不会 运行、 的构建计划将根据你在动态分支上的分支策略被克隆 在存储库中

建议的选项 , to use a "Git" and not a "Bitbucket / Stash" repository is also perfect, since there the "branch" option is not mandatory, is an open text field (and not a dropdown list), hence you can type a non existing branch name there as workaround (note: if you leave it empty, it will point to master by default, as per official documentation

这是您需要为 "Bitbucket / Stash" 存储库条目中的现有分支提供的强制分支名称:

如你所见,我创建了一个虚拟 ci-branch 来让它开心,它不会被开发团队使用,它是 gitflow 分支之上的一个额外分支,但它只服务于 CI管理层。

然后,可以照常应用分支策略:

再次说明重要部分是默认存储库,而不是默认分支。分支可以在该存储库的任何位置创建,而不仅仅是从默认分支创建。只要正则表达式满意,就会克隆构建。

最后,这是使用纯 "Git" 存储库条目而不是 "Bitbucket / Stash" 的附加选项:

如您所见,此处的分支条目是可选的,这也符合我们的需要,尽管您可能会错过一些不错的自动 Bamboo-Bitbucket 集成(这就是为什么,尽管这种方法很干净,但虚拟分支在 bitbucket 条目中听起来仍然合理)。

我想把它留在这里并注意现在有 conditional task 只能在某些分支上配置为 运行。