防止msdeploy在TFS Build之后同步未更改的文件?

时间:2014-10-31 21:27:02

标签: deployment tfs build msdeploy webdeploy

从TFS执行get-latest时,所有时间戳都设置为执行get操作的时间。在运行msdeploy以执行同步时,会将源中的时间戳与目标服务器上的时间戳进行比较。当然,这意味着使用TFS + msdeploy,每次构建后都会将每个文件推送到目标服务器,除非

  • 您使用增量构建
  • 构建控制器池中只有一个构建代理。

如果构建定义设置为执行Clean构建,或者如果要使用多个构建代理,那么这将不再有效。

这个主题一直出现,每隔几年我会抛出新的行,以防万一有变化。这可以通过几种不同的方式解决:

  • TFS将工作区文件的时间戳设置为上次签入时间。
  • TFS将工作区文件的时间戳设置为上次签入时文件本身的上次修改时间。
  • msdeploy使用一些基于内容的比较方法(例如MD5)来比较文件,而不是时间戳比较。
  • 别的什么?

我从来不知道去哪里搜索这些东西,因为这两个团队都非常不透明 - 特别是webdeploy团队。这是一个已经解决的问题吗?

2 个答案:

答案 0 :(得分:0)

TFS和Visual Studio团队完全透明,您可以通过http://visualstudio.uservoice.com提交功能请求,并通过http://connect.microsoft.com提交错误。

但是,服务器工作空间中的所有文件都设置为服务器上次修改文件的日期。本地工作空间物理地将文件内容与确定更改进行比较。您可以在工作区属性中从本地工作区更改为服务器工作区。

答案 1 :(得分:0)

最后,我们通过编写一个powershell脚本来包装Web Publishing Pipeline生成的.cmd文件,并在调用{{1}的命令中传递-useChecksum标志来解决这个问题。脚本。由于WPP创建的样板.cmd允许将其他参数传递给msdeploy,因此我们可以使用如下所示的行来完成此操作。

.cmd

这样,即使TFS正在创建时间戳设置为get-latest时间的工作空间,现在也指示msdeploy使用校验和。