阻止MSDeploy(有选择地)删除目标IIS服务器上的文件夹

时间:2013-03-25 04:53:57

标签: msbuild teamcity msdeploy

我有一个IIS Web应用程序,其结构大致类似于:

wwww.mysite.com
  file1.asp
  file2.asp
  \DotNet
    file3.aspx
    file3.aspx

我们正在设置TeamCity来进行自动部署。我有一个MSBuild构建步骤,部署到\ DotNet文件夹(aspx文件),并在一个单独的构建配置中,我有另一个MSBuild构建步骤,部署到根(asp文件)。

我想允许MSDeploy删除不必要的文件,例如如果我从VCS中删除file2.asp,我希望它从目标IIS服务器中删除它。

但是,我不希望它擦除\ DotNet子文件夹。

我是否可以获得比命令行开关“SkipExtraFilesOnServer”更精细的内容,或者这是一个全有或全无的交易?

3 个答案:

答案 0 :(得分:5)

事实证明,我的问题的答案比我预期的要简单得多

通过MSBuild使用MSDeployPublish目标部署到应用程序的根文件夹时,默认情况下,将删除恰好位于目标IIS服务器的 filesystem 上的额外子文件夹。

为了避免这种情况,我只是将我的DotNet文件夹的内容移动到C:\ InetPub下的一个完全独立的位置,但在IIS Mgr下保留了我原来的虚拟文件夹/应用程序结构。当然!

现在我可以尽可能多地发布到任一位置,并且一个人不会尝试删除另一个,因为一个不再是另一个的文件系统子文件夹。

如果有的话 - 这突出了我们之前的文件夹结构是多么原始,以及我没有意识到的是什么。

答案 1 :(得分:3)

我不确定你在这里寻找什么。您是否尝试从dotnet子文件夹中删除所有文件但保留文件夹?您是否尝试删除操作永远不会删除dotnet文件夹中的任何内容? msdeploy同步操作非常智能。 msdeploy将移动所有标记的项目资产,因此假设您没有删除dotnet文件夹中的文件,那么您应该没问题。

如果您只想将dotnet文件夹从任何删除操作中删除,就好像它根本不是您的项目的一部分,但它在Web服务器的子文件夹中而您想要不触及它,那么我会建议使用带有通配符的msdeploy中的skip选项。我只将它用于文件,但它也适用于文件夹。它是这样的:

 -skip:objectName=filePath,absolutePath=app_offline\.*

这里有文档:http://technet.microsoft.com/en-us/library/dd569089%28WS.10%29.aspx

搜索页面 -skip:skipAction =

答案 2 :(得分:2)

您还可以通过同步添加一个skip设置,其中包含您希望的文件夹的名称,如下面的msdeploy调用:

msdeploy
  -verb:sync 
  -source:contentPath="C:\Data\Personal\My Repo\MSDeploy\MultiSkip\Source" 
  -dest:contentPath="C:\Data\Personal\My Repo\MSDeploy\MultiSkip\Dest" 
  -skip:objectName=dirPath,absolutePath="DotNet"

[我从答案this question中取了示例。]