如何跳过删除文件夹但仍同步Web Deploy(msdeploy)同步的文件夹内容?

时间:2013-05-03 17:14:38

标签: msdeploy

假设我有一个文件夹'content'(由于某种原因)可能存在或可能不存在于Web部署同步操作的源文件夹树中。

使用skip设置可以让Web Deploy同步此文件夹的内容(无论它是否存在;我可以使用其他跳过设置来控制同步哪些文件)而不删除文件夹在同步源中不存在的snyc目标中?

[注意 - 示例命令中的换行符纯粹是装饰性的。]

使用此命令,Web Deploy将尝试删除同步目标中的“content”文件夹(如果文件中有文件,则会失败):

msdeploy.exe
  -verb:sync
  -source:dirPath=%source%
  -dest:dirPath=%target%
  -skip:skipaction=Delete,objectname=filePath,absolutepath=\\content

使用此命令,(看起来)Web部署将跳过删除同步目标中的“content”文件夹,但它也无法同步该文件夹中的任何文件(实际上这是非常合理的):

msdeploy.exe
  -verb:sync
  -source:dirPath=%source%
  -dest:dirPath=%target%
  -skip:skipaction=Delete,objectname=dirPath,absolutepath=\\content

如果事实上没有办法做到这一点,那是完全可以接受的! (但我想了解一些细节或参考资料,为什么会这样。)

2 个答案:

答案 0 :(得分:2)

一些可能的解决方案:

  1. 查看-enableRule:DoNotDeleteRule开关(see rule descriptions)。
  2. 根据this blog post
  3. ,您可能需要同时包含这两个跳过参数
      

    ...仅当父项不是时,才会处理对子项的删除规则   被删除。所以如果你跳过一个文件,但它包含目录   源,目录(以及文件)将不存在   无论如何都删除了。

    另外,请记住absolutePath param采用正则表达式,因此应该转义某些字符(例如.)。

答案 1 :(得分:0)

这似乎不可能。如果跳过删除规则阻止删除文件夹,则该文件夹中的所有子文件也不会被删除,因此子文件将不会(完全)同步。


考虑到这一点,尤其是根据jkoreska的回答,我认为我采用的解决方案并不可怕。基本上问题是源和目标根文件夹可能包含一组文件夹的某些子集,例如完整集是 bin content 模板

我想同步源(或目标)中可能不存在的文件夹内容的原因是我想对任意数量的源实例使用相同的Web Deploy命令和目标。

我的解决方案是简单地保证源实例始终包含完整的文件夹集,因此所有目标也是如此 - 在至少执行一次Web Deploy命令之后。