2

设想:

我有一个 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 /verbosity:normal

问题描述:

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

如您所见,我需要执行 BuildNumberOverrideTarget、AfterGet、AfterDropBuild 和 AfterEndToEndIteration

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

我到目前为止所尝试的。

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

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

. 因此,我尝试自己添加属性以强制使用 DesktopBuild:

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

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

所以我的问题是双重的:

  1. 任何人都知道如何从命令行强制桌面构建?(似乎/property:IsDesktopBuild=true还不够)
  2. 如果 IsDesktopBuild 不是问题,关于为什么某些自定义任务没有触发的线索有什么想法吗?
4

2 回答 2

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

于 2012-07-06T18:04:59.103 回答
0

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

于 2013-10-02T05:35:28.220 回答