2016-04-12 24 views
0

我改变的TeamCity的内部版本号(9.1.4)建立与在PowerShell中的服务信息(构建脚本互动)是这样的:的TeamCity - AssemblyInfoPatcher不使用更新的变量

Write-Host "##teamcity[buildNumber '$version.$arg2']" 

这是工作绝对精细。

问题是AssemblyInfoPatcher不想使用此更新的内部版本号。

所以我试图使用它的变量/参数,但这也行不通。

我将以下变量“Major.Minor.Patch”定义为“配置参数”或“环境变量”。 AssemblyInfoPatcher正好使用这些变量,并使用TeamCity中构建版本中定义的版本来更改我的文件的文件版本。

如果我尝试用服务消息更改变量/参数,它不起作用。 AssemblyInfoPatcher仍在使用旧值。

例与环境变量

Write-Host "##teamcity[setParameter name='env.Major.Minor.Patch' value='$version']" 

实例与配置参数

Write-Host "##teamcity[setParameter name='Major.Minor.Patch' value='$version']" 

难道我做错了什么或只是不可能?我唯一希望的是,我的文件具有相同的版本号是我的TeamCity构建...

回答

2

的AsssemblyInfoPatcher运行任何构建步骤(然后再次运行毕竟恢复您的AssemblyInfo文件你的构建步骤)。因此,如果您的某个构建步骤使用服务消息设置Major.Minor.Patch,那么对游戏来说实在太晚了。

也许你可以将多个构建配置串起来。第一个配置(A)将像现在这样设置参数,然后触发第二个配置(B),该配置将使用AssemblyInfoPatcher。 B对A的快照依赖性(除了完成构建触发器之外),因此它的AssemblyInfoPatcher将能够引用%dep.A.Major.Minor.Patch%。当然,这个参数在B的AssemblyInfoPatcher运行时已经可用。

+0

感谢您的快速响应。你可能有一个关于如何构建字符串的教程的链接?我从来没有在TeamCity中这样做过。 – Shamshiel

+1

1)创建一个名为SetVersion的新buildconfig,并创建一个将执行服务消息的步骤。 2)修改您的原始构建配置的触发器,在SetVersion上添加一个“完成构建触发器”。 3)修改您的原始构建配置的依赖关系,在SetVersion上添加“Snapshot依赖关系”。 4)修改你当前的构建配置的AssemblyInfoPatcher来引用'%dep.SetVersion.Major.Minor.Patch%'。我希望有所帮助。 – sferencik

+1

谢谢你的简要解释。我设法自己做。我差不多完全像你说的那样做了,但是我没有执行第2步。我保留了VCS触发器,它仍然在工作,因为依赖性TeamCity首先构建了版本构建。 – Shamshiel