在功能分支上运行测试

Gau*_*aui 8 git teamcity

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

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

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

我怎样才能做到这一点?

如果我添加/refs/heads/(feature/*)到分支规范(默认分支下面),这可以很好地工作,但它总是部署 - 我不想要.

在此输入图像描述

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

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

Sam*_*der 10

实现您想要的方法是将您的构建分成2个构建并在它们之间具有依赖关系.然后你可以在构建之间有单独的触发器.

因此,拆分构建,以便构建包含的A

  • 构建测试
  • 运行测试

并构建包含的B

  • 构建和部署

为构建B提供构建B的快照依赖性.

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

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

更新 如果这太麻烦了,那么你可能会玩一个小技巧,但在Run测试和Build and Deploy之间创建一个构建步骤,它调用命令行或PowerShell脚本.调用脚本传递%teamcity.build.branch%,然后脚本可以检查,如果它被称为与devExit 0如果是的话,并Exit -1如果不是,然后这一步应该构建失败,并阻止部署.这意味着构建似乎失败但会阻止您希望避免运行的步骤.如果此步骤失败,可能会让teamcity不报告构建失败,我不确定

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