情境:
我有一个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
所以我的问题是双重的:
答案 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等 除了你提到的参数?