iis - MsDeploy 远程执行 list 两次

标签 iis deployment msdeploy

我有:

  • 为 msdeploy 创建了一个 list :
    停止、卸载、复制、安装和启动 Windows 服务。
  • 从 list 创建了一个包
  • 对远程服务器上的包执行 msdeploy。

  • 问题:它执行整个 list 两次。

    尝试过:我已经修改了 waitInterval 和 waitAttempts 认为它​​超时并重新开始,但这并没有帮助。

    问题:什么可能使它执行两次?

    list :
    <sitemanifest>
      <runCommand path="net stop TestSvc"
                  waitInterval="240000"
                  waitAttempts="1"/>
    
      <runCommand 
        path="C:\Windows\Microsoft.NET\Framework\v4.0.30319\installutil.exe /u
           C:\msdeploy\TestSvc\TestSvc\bin\Debug\TestSvc.exe"
           waitInterval="240000"
           waitAttempts="1"/>
    
      <dirPath path="C:\msdeploy\TestSvc\TestSvc\bin\Debug" />
    
      <runCommand 
        path="C:\Windows\Microsoft.NET\Framework\v4.0.30319\installutil.exe
        C:\msdeploy\TestSvc\TestSvc\bin\Debug\TestSvc.exe"
        waitInterval="240000"
        waitAttempts="1"/>
    
      <runCommand path="net start TestSvc"
        waitInterval="240000"
        waitAttempts="1"/>
    
    </sitemanifest>
    

    发出的打包命令:
    "C:\Program Files\IIS\Microsoft Web Deploy V2\msdeploy" 
             -verb:sync 
             -source:manifest=c:\msdeploy\custom.xml 
             -dest:package=c:\msdeploy\package.zip
    

    发出执行它的命令:
    "C:\Program Files\IIS\Microsoft Web Deploy V2\msdeploy" 
             -verb:sync 
             -source:package=c:\msdeploy\package.zip 
             -dest:auto,computername=<computerNameHere>
    

    我作为域用户运行,该用户对框具有管理访问权限。我也尝试过传递凭据 - 这不是权限问题,命令成功,只是执行了两次。

    编辑:

    我启用了 -verbose并在日志中发现了一些有趣的行:

    详细:执行同步传递 #1。

    ...

    详细:源文件路径 (C:\msdeploy\MyTestWindowsService\MyTestWindowsService\bin\Debug\MyTestWindowsService.exe) 与目标 (C:\msdeploy\MyTestWindowsService\MyTestWindowsService\bin\Debug\MyTestWindowsService.exe) 不匹配,属性不同 (lastWriteTime[ '11/08/2011 23:40:30','11/08/2011 23:39:52'])。更新待定。

    详细:源文件路径 (C:\msdeploy\MyTestWindowsService\MyTestWindowsService\bin\Debug\MyTestWindowsService.pdb) 与目标 (C:\msdeploy\MyTestWindowsService\MyTestWindowsService\bin\Debug\MyTestWindowsService.pdb) 不匹配,属性不同 (lastWriteTime[ '11/08/2011 23:40:30','11/08/2011 23:39:52'])。更新待定。

    在这些行之后,文件不是第一次复制,而是第二次复制

    ...

    详细:依赖项检查“DependencyCheckInUse”没有发现任何问题。
    详细:收到来自代理的响应(HTTP 状态“OK”)。
    详细:当前同步传递缺少 2 个对象的流内容。

    详细:执行同步传递 #2。

    ...

    高层

    通常我会部署一个新构建的包,其中的位比服务器上的要新。

    在第二遍期间,它复制第一遍中所做的一切。

    在第 1 阶段,它将:
  • 停止、卸载、(删除服务安装创建的一些日志文件)、安装和启动 Windows 服务

  • 在第 2 阶段,它将:
  • 停止,卸载,复制文件到 、安装并启动 Windows 服务。

  • 我不知道为什么它不复制传递 1 中的文件,或者为什么触发传递 2。

    如果我重新部署相同的包而不是部署新的位,它将运行第 1 阶段中的所有步骤,而不是运行第 2 阶段。可能是因为文件具有相同的时间戳。

    最佳答案

    问题中没有足够的信息来真正重现问题以给出具体答案......但是有几件事需要检查/更改/尝试使其工作:

  • runCommand needs specific privileges
  • waitInterval="240000"waitAttempt="1" (双引号代替单引号)
  • deployment service 的权限/deployment agent关于目标机器上的目录等
  • use tempAgent feature
  • work through the troubleshooting section特别是日志并尝试 -whatif-verbose选项

  • 编辑 - 添加后 -verbose输出:

    我看到了这些可能性:
  • 时间
    两台机器在时间上有差异(其中一台只是有点偏差或一些时区问题......)
  • 文件系统
    如果文件系统之一是 FAT,这可能会导致问题(时间戳解析...)

  • 编辑 2 - 根据评论:

    在我的最后一次编辑中,我写了关于时间戳的内容,因为我怀疑比较这些时会出现问题……例如,这可能是两台机器之间的时钟不同(即使 30 秒的差异也会产生影响)和/或某些时区问题...

    我写过关于文件系统的文章。 FAT,因为 FAT 的时间戳分辨率约为 2 秒,而 NTFS 具有更高的分辨率,这在比较时间戳时可能会再次产生影响......

    根据您的描述,我建议以下解决方法:
  • use preSync and postSync for the Service handling parts (i.e. preSync for stop + uninstall and postSync for install + start)并且只在 list 或命令行中进行纯同步
  • use a script for the runCommand parts

  • 编辑 3 - 根据 Merlyn Morgan-Graham 的评论,结果供将来引用:

    使用 runCommand 时提供程序,使用批处理文件。出于某种原因,这使它停止运行两次传球。

    这个解决方案的问题是不能通过 SetParameters.xml 指定服务的安装目录。文件(对于 dontUseCommandExe/preSync/postSyncSetParameters.xml 相同)。

    编辑 4 - 根据 Merlyn Morgan-Graham 的评论:

    超时参数适用于是否终止该特定命令,而不适用于关闭 Windows 服务本身......在这种情况下,Windows 服务似乎需要很长时间才能停止,因此只有 runCommand s 在没有复制/同步的情况下执行,并且启动了整个运行的新尝试...

    关于iis - MsDeploy 远程执行 list 两次,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5408585/

    相关文章:

    internet-explorer - IE11无法连接到本地IIS,其他浏览器工作正常

    iis - 间歇性 IIS/Azure 错误

    sql-server - 具有 SQL Server 后端的 MS Access 应用程序的安全模型(部署)

    iis - MSdeploy 使用错误的虚拟目录名称部署 MVC 2 应用程序

    MSDeploy 运行命令权限

    msbuild - TFS 2010 - 构建后部署到多个服务器

    asp.net - SignalR 和负载平衡与主动/主动粘性 session

    ASP.NET部署

    visual-studio-2013 - xamarin 应用程序无法在 Visual Studio 2013 中部署

    html - Tomcat 服务器不会加载网页