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

时间:2012-07-02 15:50:58

标签: msbuild jenkins tfs2008 msbuild-task

情境:

我有一个TFS Build(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   / verbosity:正常 / property:IsDesktopBuild = true

但行为是相同的,只执行任务: BeforeCompileConfiguration,AfterCompileConfiguration,AfterCompile

所以我的问题是双重的:

  1. 任何人都知道如何从命令行强制使用Desktop Build? (似乎 / property:IsDesktopBuild = true 是不够的)
  2. 如果IsDesktopBuild不是问题,那么想知道为什么某些自定义任务没有触发?

2 个答案:

答案 0 :(得分:1)

您不应该尝试强制桌面版本。实际上,您应该朝着相反的方向前进 - 强制进行非桌面构建。

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

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

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

  

/ fileLogger /fileLoggerParameters:LogFile=TFSBuild_DesktopBuild.log;Create;Encoding=UTF-8;verbosity=normal / verbosity:normal / property:IsDesktopBuild = true

你应该将IsDesktopBuild设置为false:

  

/ fileLogger /fileLoggerParameters:LogFile=TFSBuild_DesktopBuild.log;Create;Encoding=UTF-8;verbosity=normal / verbosity:normal / property:IsDesktopBuild = false

答案 1 :(得分:0)

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