MsDeploy远程执行清单两次

Tim*_*ett 10 deployment iis msdeploy

我有:

  1. 为msdeploy创建了一个清单:
    停止,卸载,复制,安装和启动Windows服务.
  2. 从清单创建一个包
  3. 针对远程服务器对包执行msdeploy.

问题:它执行两次整个清单.

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

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

清单:

<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>
Run Code Online (Sandbox Code Playgroud)

发出包装命令:

"C:\Program Files\IIS\Microsoft Web Deploy V2\msdeploy" 
         -verb:sync 
         -source:manifest=c:\msdeploy\custom.xml 
         -dest:package=c:\msdeploy\package.zip
Run Code Online (Sandbox Code Playgroud)

发出执行它的命令:

"C:\Program Files\IIS\Microsoft Web Deploy V2\msdeploy" 
         -verb:sync 
         -source:package=c:\msdeploy\package.zip 
         -dest:auto,computername=<computerNameHere>
Run Code Online (Sandbox Code Playgroud)

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


编辑:

我启用-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状态为"确定").
详细:当前同步传递缺少2个对象的流内容.

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

...


高水平

通常我使用比服务器上更新的位部署一个新构建的包.

在第二遍期间,它复制了第一遍中完成的所有内容.

在第1遍中,它将:

  • 停止,卸载,(删除由服务安装创建的一些日志文件),安装和启动Windows服务

在第2阶段,它将:

  • 停止,卸载,复制文件,安装和启动Windows服务.

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

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

Yah*_*hia 1

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

编辑-添加-verbose输出后:

我看到了这些可能性:

  • 时间
    两台机器都有时间差异(其中一台稍微有点偏差或存在时区问题......)
  • 文件系统
    如果其中一个文件系统是 FAT,这可能会导致问题(时间戳解析...)

编辑2 - 根据评论:

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

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

根据您的描述,我建议采用以下解决方法:

编辑 3 - 根据 Merlyn Morgan-Graham 的评论,结果供将来参考:

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

该解决方案的问题在于,无法通过SetParameters.xml文件指定服务的安装目录(对于dontUseCommandExe//而言preSync也是如此)。postSyncSetParameters.xml

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

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