43

是否可以将文件夹的内容(纯 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 应用程序名称”的源相关的错误。
4

1 回答 1

87

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

Web Deploy(又名 MSDeploy)使用提供程序模型,并且有大量可用的提供程序。为您提供一些提供者的示例;同步 IIS Web 应用程序时,您将使用 iisApp,对于 MSDeploy 包,您将使用包,对于 Web 服务器 webServer 等。如果要将本地文件夹同步到远程 IIS 路径,则可以使用contentPath提供程序。您还可以使用此提供程序将文件夹从一个网站同步到另一个网站。

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

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

我们使用同步动词来描述我们正在尝试做的事情,然后将 contentPath 提供程序用于源和目标。现在让我们填写这些值应该是什么。对于源值,您需要传入要同步的文件夹的完整路径。在我的情况下,文件位于C:\temp\files-to-pub。对于 dest 值,您将提供文件夹路径作为 IIS 路径。在我的例子中,我正在同步的网站被命名为 sayedupdemo,所以我想要同步的 IIS 路径是'<em>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 –要使用的authType 。NTLM 或基本。对于 WMSvc,这通常是 Basic,对于 Remote Agent Service,这通常是 NTLM

就我而言,我正在发布到Windows Azure 网站。所以我将使用的值是:

所有这些值都可以在 .publishSettings 文件中找到(可以从 WindowsAzure.com 的网站仪表板下载)。对于ComputerName值,您需要附加站点名称以获取完整 URL。在上面我手动添加的示例?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 结果

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

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

目的地:汽车

在您的情况下,我注意到您正在使用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$'
于 2012-08-20T03:39:09.127 回答