获取MSDeploy以跳过文件夹中的特定文件夹和文件类型作为CCNet任务

时间:2012-06-22 08:40:26

标签: continuous-integration cruisecontrol.net msdeploy ccnet-config

在使用同步时,我希望MSDeploy到skip个特定文件夹和其他文件夹中的文件类型。目前我正在使用CCNet通过同步动词调用MSDeploy来将网站从构建转移到登台服务器。由于目标上的文件是由应用程序/用户上传的文件等创建的,因此我需要exclude specific folders from being deleted on the destination。此外,还有站点创建的清单文件需要保留在目标位置。

目前我使用了-enableRule:DoNotDeleteRule但是在目的地上留下过时的文件。

<exec>
    <executable>$(MsDeploy)</executable>
    <baseDirectory>$(ProjectsDirectory)$(projectName)$(ProjectsWorkingDirectory)\Website\</baseDirectory>
    <buildArgs>-verb:sync 
        -source:iisApp="$(ProjectsDirectory)$(projectName)$(ProjectsWorkingDirectory)\Website\" 
        -dest:iisApp="$(website)/$(websiteFolder)"
        -enableRule:DoNotDeleteRule</buildArgs>
    <buildTimeoutSeconds>600</buildTimeoutSeconds>
    <successExitCodes>0,1,2</successExitCodes>
</exec>

我曾尝试使用跳过操作但遇到问题。最初我删除了DoNotDeleteRule并将其替换为(multiple)skip

<exec>
    <executable>$(MsDeploy)</executable
    <baseDirectory>$(ProjectsDirectory)$(projectName)$(ProjectsWorkingDirectory)\Website\</baseDirectory>
    <buildArgs>-verb:sync 
        -source:iisApp="$(ProjectsDirectory)$(projectName)$(ProjectsWorkingDirectory)\Website\" 
        -dest:iisApp="$(website)/$(websiteFolder)"
        -skip:objectName=dirPath,absolutePath="assets" 
        -skip:objectName=dirPath,absolutePath="survey" 
        -skip:objectName=dirPath,absolutePath="completion/custom/complete*.aspx" 
        -skip:objectName=dirPath,absolutePath="completion/custom/surveylist*.manifest" 
        -skip:objectName=dirPath,absolutePath="content/scorecardsupport" 
        -skip:objectName=dirPath,absolutePath="Desktop/docs" 
        -skip:objectName=dirPath,absolutePath="_TempImageFiles"</buildArgs>         
    <buildTimeoutSeconds>600</buildTimeoutSeconds>
    <successExitCodes>0,1,2</successExitCodes>
</exec>

但这导致以下结果:

  


  错误:来源(iisApp)和   destination(contentPath)与给定的不兼容   操作。
  错误计数:   1.

所以我从iisApp更改为contentPath而不是dirPath,absolutePath就是这样的目录:

<exec>
    <executable>$(MsDeploy)</executable
    <baseDirectory>$(ProjectsDirectory)$(projectName)$(ProjectsWorkingDirectory)\Website\</baseDirectory>
    <buildArgs>-verb:sync 
        -source:contentPath="$(ProjectsDirectory)$(projectName)$(ProjectsWorkingDirectory)\Website\" 
        -dest:contentPath="$(website)/$(websiteFolder)"
        -skip:Directory="assets" 
        -skip:Directory="survey" 
        -skip:Directory="content/scorecardsupport" 
        -skip:Directory="Desktop/docs" 
        -skip:Directory="_TempImageFiles"</buildArgs>           
    <buildTimeoutSeconds>600</buildTimeoutSeconds>
    <successExitCodes>0,1,2</successExitCodes>
</exec>

这给了我一个错误:路径中的字符非法:

  

&LT; buildresults&GT;
  信息:添加MSDeploy.contentPath(MSDeploy.contentPath)   信息:添加contentPath(C:\ WWWRoot \ MySite
               -skip:目录=资产
               -skip:目录=调查
               -skip:目录=含量/ scorecardsupport
               -skip:目录=桌面/文档
               -skip:目录= _TempImageFiles)
。   信息:添加dirPath(C:\ WWWRoot \ MySite
               -skip:目录=资产
               -skip:目录=调查
               -skip:目录=含量/ scorecardsupport
               -skip:目录=桌面/文档
               -skip:目录= _TempImageFiles)
。   &LT; / buildresults&GT;

     

&LT; buildresults&GT;
    错误:路径中的字符非常多     错误计数:1。
  &LT; / buildresults&GT;

所以我需要知道如何配置此任务,以便引用的文件夹不会在同步中删除其内容,并且也会跳过完成/自定义文件夹中的* .manifest和* .aspx文件。

2 个答案:

答案 0 :(得分:5)

这个问题是......换行! 我将每个-skip指令拆分为新行 导致路径中的非法字符。运行内联的所有skip指令解决了这个问题:

<exec>
  <executable>$(MsDeploy)</executable>
  <baseDirectory>$(ProjectsDirectory)$(projectName)$(ProjectsWorkingDirectory)\Website\</baseDirectory>
  <buildArgs>-verb:sync 
            -source:contentPath="$(ProjectsDirectory)$(projectName)$(ProjectsWorkingDirectory)\Website\" 
            -dest:contentPath="C:\WWWRoot\$(websiteFolder)" -skip:Directory="assets" -skip:Directory="_TempImageFiles" -skip:objectName=dirPath,absolutePath="\\Desktop\\Docs"
  </buildArgs>          
  <buildTimeoutSeconds>600</buildTimeoutSeconds>
  <successExitCodes>0,1,2</successExitCodes>
</exec>

答案 1 :(得分:1)

查看这篇名为Web Deployment: Excluding Files and Folders via the Web Application’s Project File的MSDN文章。特别是“排除特定文件/文件夹”部分。这将阻止目录,文件和文件/目录模式匹配作为内容包含在部署包中,并在部署时在目标上被忽略。

但是,我会退后一步,问一下为什么这些文件首先存在于您的Web项目中。我在IIS上处理用户上传内容的方法是在我的Web应用程序中添加一个虚拟目录。在Web部署包上执行同步时,将忽略虚拟目录的内容(以及vdir本身的设置)。这也为您提供了在任何您喜欢的位置托管客户端内容目录的好处,这些目录具有一系列优势(即更大的磁盘驱动器,防止因尝试用垃圾数据填充硬盘的不道德用户拒绝服务等)