我有一个构建配置,其中包含一个连接到git branch 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%
,然后运行部署步骤。
答案 0 :(得分:7)
实现您想要的方法是将您的构建拆分为2个构建并在它们之间具有依赖关系。然后你可以在构建之间有单独的触发器。
因此拆分构建,以便构建包含
的A并构建包含
的B为构建B赋予构建B快照依赖性。
然后在检测到VCS签入时添加触发器以构建A.这将确保构建和测试在任何功能分支上运行。
在检测到VCS签入时,还会在构建B上添加触发器,但编辑规则以排除功能分支。当检测到任何其他分支的签入时,构建B将启动,但是它需要构建A才能首先完成,因此它将首先排队,如果构建A失败则不会启动(假设您在选项中设置了)
<强>更新强>
如果这太麻烦那么你可能会玩一个小技巧,但在Run测试和Build and Deploy之间创建一个构建步骤,它调用命令行或PowerShell脚本。调用传入%teamcity.build.branch%
的脚本,然后脚本可以检查是否使用dev
和Exit 0
调用它,如果是,Exit -1
如果没有,则此步骤应该使构建失败并防止部署。这意味着构建似乎失败但会阻止您希望避免运行的步骤。如果此步骤失败,可能会让teamcity不报告构建失败,我不确定
你的另一个选择是你编写一个脚本来手动构建和部署,然后调用这个脚本传递%teamcity.build.branch%
并提前退出,如果它不是dev
并且只继续执行实际构建和部署,如果它是dev
。这不会导致构建失败,但意味着你必须编写脚本来完成TeamCity现在为你做的事情。
答案 1 :(得分:2)
您可以通过创建&#34;测试&#34;构建步骤(例如powershell脚本)以测试您的%teamcity.build.branch%
是否与您的feature/*
模式匹配。如果以前的步骤成功,则只运行以下步骤(在本例中为Build&amp; Deploy)。显然&#34;测试&#34;步骤不应该失败的构建。