【问题标题】:Running tests on feature branches在功能分支上运行测试
【发布时间】:2015-03-29 01:51:14
【问题描述】:

我有一个构建配置,其中包含一个连接到 git 分支 dev 的测试 VCS 根,3 个构建步骤和 1 个触发器。这些是我的构建步骤:

  • 构建测试
  • 运行测试
  • 构建和部署

我想为分支dev 运行所有这些构建步骤,但对于匹配feature/* 的分支只有两个(构建和运行测试)。我希望它显示在我的构建配置下。所以构建配置有一个默认的dev 分支运行测试和部署,但feature/* 附加分支只运行测试。

我怎样才能做到这一点?

如果我将 /refs/heads/(feature/*) 添加到分支规范(低于默认分支),这会完美运行,但它总是会部署 - 这是我不想要的。

编辑 1: 似乎有一个名为 %teamcity.build.branch% 的变量可供您使用。但是如何在部署步骤中做一个条件来检查分支是否是dev 分支。我不确定。

编辑 2: 还有一个变量名%vcsroot.branch%,它是 VCS 根目录中默认分支的名称。所以我们仍然需要一个条件来检查%teamcity.build.branch% 变量是否等于%vcsroot.branch%,然后运行部署步骤。

【问题讨论】:

标签: git teamcity


【解决方案1】:

实现您想要的方法是将构建拆分为 2 个构建并在它们之间建立依赖关系。那么你可以在构建之间有单独的触发器。

所以拆分构建,这样你就有了包含

的构建 A
  • 构建测试
  • 运行测试

并构建包含

的 B
  • 构建和部署

为构建 B 提供对构建 A 的快照依赖。

然后在检测到 VCS 签入时添加触发器以构建 A。这将确保构建和测试在任何功能分支上运行。

当检测到 VCS 签入时,还要在构建 B 上添加触发器,但要编辑规则以排除功能分支。当检测到任何其他分支上的签入时,构建 B 将启动,但它需要构建 A 首先完成,因此它将首先排队,并且如果构建 A 失败则不会启动(假设您在选项中设置)

更新 如果这太麻烦了,那么您可能可以玩一个小技巧,但在 Run tests 和 Build and Deploy 之间创建一个构建步骤,该步骤调用命令行或 powershell 脚本。调用传入%teamcity.build.branch% 的脚本,然后该脚本可以检查它是否被devExit 0 调用,如果是,则Exit -1 如果不是,则此步骤应该会导致构建失败并阻止部署。这意味着构建看起来会失败,但会阻止您想要避免的步骤运行。如果此步骤失败,可能会让 teamcity 不报告构建失败,我不确定

你的另一个选择是你编写一个手动构建和部署的脚本,然后调用这个脚本传入%teamcity.build.branch%,如果不是dev,则提前退出,然后继续进行实际的构建和部署如果是dev。这不会导致构建失败,但意味着您必须编写脚本来完成 TeamCity 现在正在为您做的事情。

【讨论】:

  • 一定还有更简单的方法吗?我们有 100 多种构建配置(测试/登台/实时)。这太麻烦了。
  • 您没有提到任何关于构建配置数量的限制。我相信这是“正确”的方式,但我会用可能有效的技巧来更新答案。
  • ok 更新了答案。即使步骤失败,我也会看看是否可以使构建看起来通过。您运行的是哪个版本的 TC?
  • TeamCity Enterprise 9.0(内部版本 32060)。谢谢你的更新。我完全想到了类似的东西(脚本方法)。 :)
【解决方案2】:

您可以通过创建“测试”构建步骤(例如 powershell 脚本)来测试您的 %teamcity.build.branch% 是否与您的 feature/* 模式匹配。如果前面的步骤成功,您只需运行以下步骤(在本例中为 Build & Deploy)。显然,“测试”步骤不应使构建失败。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-12-29
    • 1970-01-01
    • 2023-02-08
    • 2021-03-11
    • 2020-01-08
    • 1970-01-01
    • 1970-01-01
    • 2015-01-09
    相关资源
    最近更新 更多