teamcity

时间:2017-11-15 11:50:30

标签: continuous-integration nunit teamcity nunit-console

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

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

1 个答案:

答案 0 :(得分:1)

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

基于分支动态设置TeamCity参数

首先,在TeamCity中创建一个新参数:

Add New Parameter


接下来,打开一个PowerShell IDE并创建一个简单的脚本来修改TeamCity参数,如下所示:

PowerShell script

代码:

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版本,如下所示:

Same build step, different NUnit versions

请注意,除了使用参数的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运行。

让我知道是否有任何不清楚的地方,我会尽力解释。希望能对您有所帮助,对不起,我迟到了一年!