首页 > 解决方案 > 除了默认的所有分支的 Teamcity 分支规范

问题描述

我们有一个专用的 vcs 根,我们用它来检查检查分支的步骤(这是我们为 master 中的代码所做的事情的一个子集)

我试图过滤 bitbucket 拉取请求分支和主分支,使其仅在“真实”分支上触发,但它仍然继续构建主提交,这是一种资源浪费。

我试过这个规格:

-:<default>
-:refs/pull-requests/*
+:*

根据我对规范语法的理解,这应该可行,但 teamcity 不同意。

标签: gitcontinuous-integrationteamcity

解决方案


有 3 个地方可以定义分支。前 2 个(默认分支和分支规范)在您的 VCS 根目录中,使用 Git 规范格式 ( refs/heads/master),并定义要监视更改的 refs [1]。

VCS 根

Team City 需要一个用于比较更改的默认分支。这通常是master除非您有非标准配置。在分支规范中,您需要定义任何额外的 ref 来监控更改。对分支规范中定义的 refs 的任何更改都会连接到 TeamCity 进行处理。

适用于您的场景的 VCS Root 设置:

  • 默认分支:/refs/heads/master
  • 分行规范:+:*

版本控制设置

魔法真正发生在版本控制设置中。在这些设置中,只有定义的分支可用于构建。本节使用逻辑名称来定义要包含的分支。您可能需要单击“显示高级设置”以查看分支过滤器 [2]。

您可以使用 Branch Filter 右侧的向导测试一切是否正常工作。单击小魔杖图标,您应该会看到 VCS Root 正在监视的所有分支。它应该包括当前在您的 git 存储库中的任何其他分支。如果这对您来说更容易,您可以使用向导来构建您的过滤器。

对于您的方案,您应该监控所有内容 ( +:*),排除 master 分支 ( -:<default>) 以及您希望忽略的任何其他分支 ( -:pull-requests/*)。它应该看起来像:

+:*
-:<default>
-:pull-requests/*

这意味着 master 或任何以 pull-request 开头的分支中发生的任何更改都将被忽略。

您可以使用 Build Triggers 并指定哪些特定分支触发构建,从而更精细地控制基于此处的分支发生的情况。[3]

注意:有一些关于分支过滤和规范的规则可能很有趣。 [4]

参考:

1:https ://www.jetbrains.com/help/teamcity/2019.2/working-with-feature-branches.html#WorkingwithFeatureBranches-Configuringbranches

2:https ://www.jetbrains.com/help/teamcity/2019.2/branch-filter.html

3:https ://www.jetbrains.com/help/teamcity/2019.2/configuring-build-triggers.html

4:https ://www.jetbrains.com/help/teamcity/2019.2/working-with-feature-branches.html#WorkingwithFeatureBranches-branchSpec


推荐阅读