我在Powershell中使用服务消息(Build Script Interaction)更改了TeamCity(9.1.4)版本的内部版本号:
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构建版本号相同...
答案 0 :(得分:2)
AsssemblyInfoPatcher在任何构建步骤之前运行(然后再次运行以在所有构建步骤之后还原AssemblyInfo文件)。因此,如果您的某个构建步骤使用服务消息设置Major.Minor.Patch
,那么游戏真的为时已晚。
也许你可以将多个构建配置串起来。第一个配置(A)将像你现在一样设置参数,然后触发第二个配置(B),它将使用AssemblyInfoPatcher。 B将具有对A的快照依赖性(除了完成构建触发器),因此其AssemblyInfoPatcher将能够引用%dep.A.Major.Minor.Patch%
。当然,当B的AssemblyInfoPatcher运行时,该参数已经可用。