竹子构建计划在分支上但不在开发上(又名条件构建)

时间:2017-03-09 13:56:34

标签: java maven continuous-integration bamboo git-flow

这是尝试跨分支机构实施条件构建,默认情况下不可能,因为BAM-11257,自2012年开始,仍然未决。

上下文

  • Bamboo 5.10.3
  • 应用Gitflow分支策略
  • 我们希望在功能分支上有某种行为,在发布和修补程序分支上有不同的行为,在develop分支上有第三种不同的行为

实施(不工作)方法

  • 三种不同的构建计划
  • 第一个在构建计划的“分支”选项卡中提供了一个正则表达式(“创建用于匹配新分支的计划分支”)以仅匹配功能和错误修复分支((?=(feature.*|bugfix.*)).*$)。然后它提供了所需的行为它的阶段和工作
  • 上面配置的第二个用于发布和修补程序分支((?=(hotfix.*|release.*)).*$),然后分阶段执行自己的行为
  • 第三个在“分支”控件中有“不要创建计划分支”,即没有分支,仅适用于develop

这很好用,每个分支都有自己的构建计划,基于所需的行为。但是,当将任何分支合并到develop时,三个构建计划并行启动,因为它们中的三个在其“存储库”中具有develop作为原始分支条目。

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

我理解Bamboo需要根据某种策略(正则表达式)克隆其分支的新构建计划的起源,但是我们如何阻止它来运行原始分支的构建计划呢?或者,我们是否可以独立定义分支类型的构建计划而不是其来源并基于动态名称(例如feature-somethingfeature-bob)?

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

3 个答案:

答案 0 :(得分:3)

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

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

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

选项建议above,使用“Git”而不是“Bitbucket / Stash”存储库也是完美的,因为“分支”选项不是强制性的,是一个开放文本字段(而不是一个下拉列表),因此您可以在那里键入一个非现有的分支名称作为解决方法(注意:如果您将其保留为空,默认情况下它将指向master,按official documentation

以下是您需要为“Bitbucket / Stash”存储库条目中的现有分支提供的强制分支名称: enter image description here

正如您所看到的,我创建了一个虚拟ci-branch以使其满意,它将不会被开发团队使用,它是gitflow分支之上的附加分支,但它仅为CI管理提供服务。

然后,分支策略可以照常应用: enter image description here

再次,澄清它是默认存储库的重要部分,而不是默认分支。可以在该存储库中的任何位置创建分支,而不仅仅是从默认分支创建分支。只要正则表达式很高兴,就会克隆构建。

最后,这是使用纯“Git”存储库条目而不是“Bitbucket / Stash”的附加选项: enter image description here

正如你所看到的,这里的分支条目是可选的,它也适合我们的需要,虽然你可能会错过一些不错的自动Bamboo-Bitbucket集成(这就是为什么,虽然这种方法很干净,但是在bitbucket条目中是一个虚拟分支听起来仍然合理。)

答案 1 :(得分:1)

我一直面临着类似的问题。我找到的唯一解决方法是停止使用"链接的存储库"。不知道你是否熟悉这个,但你可以使用一个"链接的存储库"可用于所有构建计划,或者您可以专门为您的计划创建一个。 为了解决我的问题,我不得不添加一个类型为" Git"的存储库。 (即使我们使用GitHub)。这让我离开了"分支"字段为空,从而解决了我的问题。

修改的 事实上,我必须指定一个错误的"此字段中的分支名称可使其正常工作...

希望这会有所帮助。 西蒙

答案 2 :(得分:0)

如果包含字符串“develop”,前两个构建计划中的正则表达式是否可以更改为不执行?

类似于这种消极的前瞻:^((?!develop).)*$