在功能分支上运行测试

时间:2015-01-29 18:00:13

标签: git teamcity

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

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

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

我怎样才能做到这一点?

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

enter image description here

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

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

2 个答案:

答案 0 :(得分:7)

实现您想要的方法是将您的构建拆分为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现在为你做的事情。

答案 1 :(得分:2)

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