Bamboo 在分支机构而不是开发机构(也称为条件构建)上构建计划
Bamboo build plan on branches but not on develop (aka conditional build)
这是跨分支实施条件构建的尝试,默认情况下不可能,因为 BAM-11257,自 2012 年开放,仍在等待中。
上下文:
- 竹子 5.10.3
- 已应用 Gitflow 分支策略
- 我们希望在功能分支上有某种行为,在发布和修补程序分支上有不同的行为,在
develop
分支上有第三种不同的行为
已实施(无效)方法:
- 三个不同的构建计划
- 第一个在构建计划的 "Branches" 选项卡中提供了一个正则表达式(“为匹配新分支创建计划分支”)以仅匹配功能和错误修复分支(
(?=(feature.*|bugfix.*)).*$
)。然后它提供在其阶段和工作中的期望行为
- 上面的第二个配置用于发布和修补程序分支 (
(?=(hotfix.*|release.*)).*$
),然后在阶段中有自己的行为
- 第三个"Branches"控件中有"Do not create plan branches",即没有分支,只针对
develop
.
这很好用,每个分支都有自己的基于所需行为的构建计划。但是,当将任何分支合并到 develop
时,这三个构建计划并行开始,因为它们三个的 "Repositories" 中都有 develop
作为原始分支条目。
问题:如何避免这种副作用?我们如何才能只为某些分支类型而不是原始分支(在本例中 develop
)指定构建计划?
我了解 Bamboo 需要一个来源,根据特定策略(正则表达式)为其分支克隆新的构建计划,但是我们如何将其阻止到 运行 原始分支的构建计划出色地?或者,我们可以为分支 type 独立于其来源并基于动态名称(例如 feature-something
、feature-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" 选项卡中,您可以看到“计划分支允许您 运行 在 源存储库中的不同分支上构建 使用相同的计划配置。”。请注意粗体:分支策略应用于整个存储库中的分支,不是仅从您在存储库条目中定义的默认分支创建的分支,而是应用于存储库中的任何分支.
- 那是转折点:因此您可以定义一个新的分支,平行于
master
和 develop
,我们称它为 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 只能在某些分支上配置为 运行。
这是跨分支实施条件构建的尝试,默认情况下不可能,因为 BAM-11257,自 2012 年开放,仍在等待中。
上下文:
- 竹子 5.10.3
- 已应用 Gitflow 分支策略
- 我们希望在功能分支上有某种行为,在发布和修补程序分支上有不同的行为,在
develop
分支上有第三种不同的行为
已实施(无效)方法:
- 三个不同的构建计划
- 第一个在构建计划的 "Branches" 选项卡中提供了一个正则表达式(“为匹配新分支创建计划分支”)以仅匹配功能和错误修复分支(
(?=(feature.*|bugfix.*)).*$
)。然后它提供在其阶段和工作中的期望行为 - 上面的第二个配置用于发布和修补程序分支 (
(?=(hotfix.*|release.*)).*$
),然后在阶段中有自己的行为 - 第三个"Branches"控件中有"Do not create plan branches",即没有分支,只针对
develop
.
这很好用,每个分支都有自己的基于所需行为的构建计划。但是,当将任何分支合并到 develop
时,这三个构建计划并行开始,因为它们三个的 "Repositories" 中都有 develop
作为原始分支条目。
问题:如何避免这种副作用?我们如何才能只为某些分支类型而不是原始分支(在本例中 develop
)指定构建计划?
我了解 Bamboo 需要一个来源,根据特定策略(正则表达式)为其分支克隆新的构建计划,但是我们如何将其阻止到 运行 原始分支的构建计划出色地?或者,我们可以为分支 type 独立于其来源并基于动态名称(例如 feature-something
、feature-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" 选项卡中,您可以看到“计划分支允许您 运行 在 源存储库中的不同分支上构建 使用相同的计划配置。”。请注意粗体:分支策略应用于整个存储库中的分支,不是仅从您在存储库条目中定义的默认分支创建的分支,而是应用于存储库中的任何分支.
- 那是转折点:因此您可以定义一个新的分支,平行于
master
和develop
,我们称它为bamboo-management-branch
,您甚至可以通过以下方式阻止其删除或更改Bitbucket,然后将此分支用作初始计划配置中默认存储库条目的默认分支。就是这样。现在,你有一个团队内没有人会使用的分支,一个永远不会 运行、 但 的构建计划将根据你在动态分支上的分支策略被克隆 在存储库中。
建议的选项 master
by default, as per official documentation。
这是您需要为 "Bitbucket / Stash" 存储库条目中的现有分支提供的强制分支名称:
如你所见,我创建了一个虚拟 ci-branch
来让它开心,它不会被开发团队使用,它是 gitflow 分支之上的一个额外分支,但它只服务于 CI管理层。
然后,可以照常应用分支策略:
再次说明重要部分是默认存储库,而不是默认分支。分支可以在该存储库的任何位置创建,而不仅仅是从默认分支创建。只要正则表达式满意,就会克隆构建。
最后,这是使用纯 "Git" 存储库条目而不是 "Bitbucket / Stash" 的附加选项:
如您所见,此处的分支条目是可选的,这也符合我们的需要,尽管您可能会错过一些不错的自动 Bamboo-Bitbucket 集成(这就是为什么,尽管这种方法很干净,但虚拟分支在 bitbucket 条目中听起来仍然合理)。
我想把它留在这里并注意现在有 conditional task 只能在某些分支上配置为 运行。