2012-07-02 33 views
2

场景:如何使用MSBuild/TFS2008强制非桌面版本?

我有一个TFS生成(TFS2008),有几个目标覆盖:BuildNumberOverrideTarget,AfterGet,BeforeCompileConfiguration,AfterCompileConfiguration,AfterCompile,AfterDropBuild和AfterEndToEndIteration。一切正常。

但是现在我正在将所有CI移植到Jenkins服务器。我使用的MSBuild插件使用这些参数来调用TFSBuild.proj:

/fileLogger /fileLoggerParameters:LogFile=TFSBuild_DesktopBuild.log;Create;Encoding=UTF-8;verbosity=normal /冗长:正常

问题描述:

我的问题是,只有一些自定义任务正在执行:BeforeCompileConfiguration,AfterCompileConfiguration,AfterCompile

正如你所看到的,我需要BuildNumberOverrideTarget,AfterGet,AfterDropBuild和AfterEndToEndIteration来执行。

似乎只编译关于它的任务和自定义任务正在执行。从TFS触发的构建视为非桌面构建,而由Jenkins触发的构建则视为桌面构建。

我到现在为止所尝试过的。

如果我从本地.cmd文件运行构建,则会发生相同的行为。所以我认为IsDesktopBuild属性是一个问题。这msdn link的进一步阅读给我的线索,当读取

为“只有编译和测试(如果已启用)执行”

。所以我尝试添加自己的财产强制DesktopBuild:

/fileLogger /fileLoggerParameters:LogFile=TFSBuild_DesktopBuild.log;Create;Encoding=UTF-8;verbosity=normal /冗长:正常/属性:IsDesktopBuild =真

但行为是一样的,只是执​​行的任务:BeforeCompileConfiguration,AfterCompileConfiguration,AfterCompile

所以我的问题是双重:

  1. 任何人都知道如何从命令行强制桌面生成?(看起来/property:IsDesktopBuild = true是不够的)
  2. 如果IsDesktopBuild不是问题,想知道为什么一些自定义任务不会触发?

回答

1

你不应该试图强制桌面版本。事实上,你应该朝相反的方向前进 - 强制非桌面版本。

桌面版本是默认设置。这意味着,默认情况下IsDesktopBuild = true。所以没有必要明确地设置它。

当TFS Build执行构建时,它将false传递给IsDesktopBuild。

要让Jenkins运行与TFS Build相同的任务,您应该让它传递给IsDesktopBuild。相反的:

/fileLogger /fileLoggerParameters:LogFile=TFSBuild_DesktopBuild.log;Create;Encoding=UTF-8;verbosity=normal /冗长:正常/属性:IsDesktopBuild = 真正

你应该设置IsDesktopBuild为false:

/fileLogger /fileLoggerParameters:LogFile=TFSBuild_DesktopBuild.log;Create;Encoding=UTF-8;verbosity=normal /冗长:正常/属性:IsDesktopBuild =

+0

然后,我如何强制执行这些任务(BuildNumberOverrideTarget,AfterGet,AfterDropBuild和AfterEndToEndIteration)来执行? –

+0

/property:IsDesktopBuild = false –

+0

如果你把/属性:IsDesktopBuild = false目标(BuildNumberOverrideTarget,AfterGet,AfterDropBuild和AfterEndToEndIteration)不执行... –

0

为什么只是明确指定你想要的目标? /t:BuildNumberOverrideTarget; AfterGet; BeforeCompileConfiguration; AfterCompileConfiguration等 除了你提到的参数?

相关问题