(MSDeploy)将文件夹的内容部署到远程IIS服务器

时间:2012-08-09 14:16:31

标签: msdeploy webdeploy

是否可以将文件夹(普通Html文件)的内容部署到远程IIS6 / 7服务器上的特定Web应用程序?

以下命令不会出错,但也不会将任何文件发布到远程服务器:

 msdeploy.exe -verb:sync -source:dirPath="c:\myHtmlFiles" -dest:auto,ComputerName="http://deploy.mycompany.co.uk/msdeploy?site=TestSite",includeAcls="false",username="administrator",password="myPassword" -enableRule:DoNotDeleteRule -disableLink:AppPoolExtension -disableLink:ContentExtension -allowUntrusted

注:

  • WebDeploy正确安装在目标服务器上,并且可以很好地使用从.NET项目的msbuild脚本创建的包。
  • 'http://deploy.mycompany.co.uk/msdeploy'对于收听终点是正确的。
  • 其他地方建议使用'?site = TestSite'查询字符串,但不起作用。
  • 目标服务器上存在“TestSite”Web应用程序。
  • 参数文件和-setParam不起作用,如果您尝试设置,声明或提供参数,则会呈现与不支持参数“IIS Web应用程序名称”的源相关的错误。

1 个答案:

答案 0 :(得分:74)

我刚刚在http://sedodream.com/2012/08/20/WebDeployMSDeployHowToSyncAFolder.aspx写了一篇博文来回答这个问题。从您的问题来看,您似乎对MSDeploy非常熟悉,所以答案可能有点冗长,但我希望对MSDeploy知之甚少的人能够理解。我已经粘贴了下面的答案。

Web Deploy(又名MSDeploy)使用提供者模型,开箱即用good number of providers。给你一些提供者的例子;在同步IIS Web应用程序时,您将使用iisApp,对于MSDeploy程序包,您将使用程序包,Web服务器webServer等。如果要将本地文件夹同步到远程IIS路径,则可以使用{{3}提供者。您还可以使用此提供程序将文件夹从一个网站同步到另一个网站。

在这种情况下我们想要做的一般想法是将PC中的文件夹同步到IIS网站。调用msdeploy.exe可能有点冗长,所以让我们一步一步构造命令。我们将使用下面的模板。

msdeploy.exe -verb:sync -source:contentPath="" -dest:contentPath=""

我们使用同步动词来描述我们要做的事情,然后对source和dest使用contentPath提供程序。现在让我们填写这些值应该是什么。对于源值,您需要将完整路径传递到要同步的文件夹。在我的例子中,文件位于 C:\ temp \ files-to-pub 。对于dest值,您将把文件夹的路径作为IIS路径。在我的情况下,我正在同步的网站名为sayedupdemo,因此我想要同步的IIS路径是' sayedupdemo / files-to-pub '。现在给我们。

msdeploy.exe –verb:sync -source:contentPath="C:\temp\files-to-pub" -dest:contentPath='sayedupdemo/files-to-pub'

对于dest值,我们没有给出任何参数来指示那些命令应该被发送到哪个服务器。我们需要添加这些参数。通常需要传入的参数是。

  • ComputerName - 这是将处理发布操作的URL或计算机名称
  • 用户名 - 用户名
  • 密码 - 密码
  • AuthType - 要使用的contentPath。 NTLM或Basic。对于WMSvc,这通常是Basic,对于Remote Agent Service,这是NTLM

就我而言,我正在发布authType。所以我将使用的值是:

  • ComputerName:Windows Azure Web Site
  • 用户名:$ sayedupdemo
  • 密码:thisIsNotMyRealPassword
  • AuthType:基本

所有这些值都可以在.publishSettings文件中找到(可以从WindowsAzure.com的Web站点仪表板下载)。对于 ComputerName 值,您需要附加网站名称以获取完整的网址。在上面的示例中,我手动添加了?site=sayedupdemo,其名称与Azure门户中显示的名称相同。所以现在我们拥有的命令就是。

msdeploy.exe 
    –verb:sync 
    -source:contentPath="C:\temp\files-to-pub" 
    -dest:contentPath='sayedupdemo/files-to-pub'
            ,ComputerName="https://waws-prod-blu-001.publish.azurewebsites.windows.net/msdeploy.axd?site=sayedupdemo"
            ,UserName='$sayedupdemo'
            ,Password='thisIsNotMyRealPassword'
            ,AuthType='Basic'

好的,我们快到了!在我的情况下,我想确保在此过程中我不从服务器中删除任何文件。所以我还要添加–enableRule:DoNotDeleteRule。所以现在我们的命令。

msdeploy.exe 
    –verb:sync 
    -source:contentPath="C:\temp\files-to-pub" 
    -dest:contentPath='sayedupdemo/files-to-pub'
            ,ComputerName="https://waws-prod-blu-001.publish.azurewebsites.windows.net/msdeploy.axd?site=sayedupdemo"
            ,UserName='$sayedupdemo'
            ,Password='thisIsNotMyRealPassword'
            ,AuthType='Basic' 
    -enableRule:DoNotDeleteRule 

在执行此命令之前,我将首先通过–whatif执行它。这将为我提供实际操作的摘要,而不会实际导致任何更改。当我这样做时,结果如下图所示。

msdeploy result

在我确认更改都是故意的后,我删除了–whatif并执行了命令。之后,本地文件发布到远程服务器。现在我已经同步了每个发布的文件,这将导致只发布已更改的文件。

如果您想了解如何snyc单个文件,您可以看到我之前的博客文章如何在发布期间使您的Web应用程序脱机。

DEST:自动

在您的情况下,我注意到您使用的是dest:auto,您可以使用它,但您必须将IIS应用程序名称作为参数传递,它将替换该文件夹的路径。以下是命令。

msdeploy.exe 
    -verb:sync
    -source:contentPath="C:\temp\files-to-pub" 
    -dest:auto
        ,ComputerName="https://waws-prod-blu-001.publish.azurewebsites.windows.net/msdeploy.axd?site=sayedupdemo"
        ,UserName='$sayedupdemo'
        ,Password='thisIsNotMyRealPassword'
        ,AuthType='Basic' 
-enableRule:DoNotDeleteRule 
-setParam:value='sayedupdemo',kind=ProviderPath,scope=contentPath,match='^C:\\temp\\files-to-pub$'