teamcity 中每个分支的不同 nunit 版本

Different nunit versions per branch in teamcity

当使用 teamcity NUnit 3 构建步骤时,它会询问 nunit 控制台运行程序的路径。它被配置为在包中的特定文件夹中搜索它,例如 packages\NUnit.ConsoleRunner.3.6.1\tools.

但是在将nunit 升级到更新版本(3.7.0) 之后需要更改此路径,但它位于构建步骤中。有没有办法根据分支名称设置参数值或如何解决需要多个 nunit 版本的问题?

这是一个很好的问题。是的,这是可以做到的;这是一种方法:

根据分支动态设置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 配置中的第一个构建步骤)并在 'Script source' 中包含以下代码(根据您在源代码树中保存您的文件的位置修改路径脚本):

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 上)和 'pass' 虚拟测试程序集(在 NUnit v3 上)。如果您希望在特定分支上以 NUnit v3 为目标,则只需切换脚本中的参数值 仅在该分支上 。 TeamCity 将动态设置参数,你好,你的测试现在 运行ning 针对 NUnit v3。

如果有任何不清楚的地方,请告诉我,我会尽力解释得更好。希望这对您有所帮助,抱歉我迟到了一年!