这是一个很好的问题。是的,这是可以做到的;这是一种方法:
根据分支动态设置 TeamCity 参数
首先,在 TeamCity 中新建一个参数:
接下来,打开一个 PowerShell IDE 并创建一个简单的脚本来修改 TeamCity 参数,如下所示:
代码:
Write-Host "##teamcity[setParameter name='MyNewParameter' value='someValue']"
将此脚本保存在您的源代码树中(例如,SetTeamCityParameters.ps1),根据分支根据需要修改参数值。例如,您可以这样做:
Write-Host "##teamcity[setParameter name='NUnitVersion' value='3.7']"
最后,创建一个 PowerShell 构建步骤(作为 TeamCity 配置中的第一个构建步骤)并在“脚本源”中包含以下代码(根据您保存脚本的源树中的位置修改路径):
If (Test-Path "Source/SetTeamCityParameters.ps1") { invoke-expression "Source/SetTeamCityParameters.ps1" }
您的 TeamCity 构建现在将根据正在构建的分支获得此参数的正确值。
基于分支在 TeamCity 中运行不同的 NUnit 版本
但是,仅更改参数可能不足以满足您的需求,因为据我所知,您无法动态更改 NUnit 构建步骤的该属性。 幸运的是,有一个解决方法: 创建 两个 TeamCity NUnit 构建步骤(一个从另一个克隆),其中唯一的区别是目标 NUnit 版本,如下所示:
请注意,除了目标 NUnit 版本和使用参数的测试程序集路径之外,这两个构建步骤是相同的。 (在此示例中,它们使用了多个参数,但您的情况可能更简单。)
现在您需要在 TeamCity 中创建两个参数,称为 TestsNUnitv2 和 `TestsNUnitv3',然后修改您的 PowerShell 脚本以设置它们:
Write-Host "##teamcity[setParameter name='TestsNUnitv2' value='RealTests.dll']"
Write-Host "##teamcity[setParameter name='TestsNUnitv3' value='DummyTests.dll']"
请注意,这里我们将 NUnit v2 测试运行程序指向真正的测试程序集,将 NUnit v3 测试运行程序指向一个虚拟测试程序集。您需要自己创建此测试程序集并将其包含在您的解决方案中(在所有分支上) - 只需在其中进行一项简单通过的测试即可。
最后,修改两个构建步骤,使“v2”构建步骤使用“TestsNUnitv2”路径来查找其测试程序集,而“v3”构建步骤使用其他参数。
具有上述脚本的任何分支都将运行真正的测试(在 NUnit v2 上)并“通过”虚拟测试程序集(在 NUnit v3 上)。如果您希望在特定分支上以 NUnit v3 为目标,则只需在脚本中切换参数值仅在该分支上。 TeamCity 将动态设置参数,嘿,你的测试现在正在针对 NUnit v3 运行。
如果有任何不清楚的地方,请告诉我,我会尽力解释得更好。希望这会有所帮助,对不起,我迟到了一年!