我有一个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”更精细的内容,或者这是一个全有或全无的交易?
答案 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中取了示例。]