在TeamCity构建配置中使用/ p每个构建步骤的正确方法是什么?

时间:2015-03-04 19:27:25

标签: msbuild teamcity

在TeamCity中,我创建了一个带有两个msbuild构建步骤的构建配置,它应该构建一个解决方案.sln文件。

我将目标定义为" Build",当我运行构建时,两个步骤显然都执行标准配置,并且两次构建Debug或Release配置。

现在我进入了构建步骤设置,找到CommandLine参数,Debug我添加了/p:Configuration=DebugRelease我添加了/p:Configuration=Release。< / p>

构建此结果会导致TeamCity警告:

MSBuild command line parameters contain "/property:" or "/p:". It is recommended to define System Property on Build Parameters instead.

虽然已经构建了一个调试版和一个版本。

我用Google搜索了此消息并创建了两个System Parameters/p:Configuration=Debug/p:Configuration=Release。 如果我现在将调试命令行更改为%system.DebugConfig%并释放到%system.ReleaseConfig%,则会出现相同的错误。 只有这样,我才真正明白,这些系统参数将永远不会自动传递给每个构建步骤。

好的,但是如何正确定义两个不同的构建步骤,使用系统参数构建调试和发布,或者没有团队城市抱怨在命令行中找到/p

1 个答案:

答案 0 :(得分:6)

没有办法做到这一点(我知道,请耐心等待),但有足够的选择:

如果您愿意删除单独的构建步骤而是使用单独的构建 - 通常不应该是任何问题,请使用模板:创建build template,在其中添加必须可配置的所有参数,就像你的情况Configuration一样,给它们合适的默认值。然后为所需的每个属性组合创建构建配置,并在该配置中覆盖参数。

另一种选择:自己动手。我过去在几个CI之间进行了切换,很明显,你越依赖CI系统的功能,手动测试构建越难,爬过CI系统的Web界面就越麻烦数据库或配置文件以找到正确的配置参数,并且转换到另一个CI变得更加残缺。所以有一次我放弃了它并写了几个msbuild'主'脚本,只需点击一下按钮即可构建所有内容,可以这么说,记住Joel Test,但是在我想要的任何机器上,包括我自己的,根本不需要任何CI。这是一种令人宽慰的事情,我从那时起就没有回头,现在CI配置保持在最低限度。适用于您的情况:创建一个msbuild文件,如下所示,TC中的构建步骤调用它的Build目标,并有一个与实际项目文件相关的MyTargetProjectFile系统参数:

<ItemGroup>
  <Configurations Include="Debug;Release"/>
</ItemGroup>

<Target Name="Build">
  <MsBuild Projects="$(MyTargetProjectFile)" Targets="Build"
           Properties="Configuration=%(Configurations.Identity)"/>
</Target>

还有另一种选择:忽略TeamCity的警告。我从来都不清楚他们为什么坚持这样做,这似乎违反直觉并导致像这样的问题:]具有不同属性的不同构建步骤似乎是一个相当基本的要求,不是吗?我不认为我们有任何msbuild步骤不使用/ p,它一切正常。