【问题标题】:(MSDeploy) Deploying Contents of a Folder to a Remote IIS Server(MSDeploy) 将文件夹的内容部署到远程 IIS 服务器
【发布时间】:2012-08-09 14:16:31
【问题描述】:

是否可以将文件夹的内容(纯 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 应用程序名称”,则会呈现与不支持参数“IIS Web 应用程序名称”的源相关的错误。

【问题讨论】:

    标签: msdeploy webdeploy


    【解决方案1】:

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

    Web Deploy(又名 MSDeploy)使用提供程序模型,并且有一个开箱即用的 good number of providers。为您提供一些提供者的示例;同步 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 路径是“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 Web Site。所以我将使用的值是:

    所有这些值都可以在 .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 执行它。这将给我一个总结,哪些操作将不会实际引起任何变化。当我这样做时,结果如下图所示。

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

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

    目标:自动

    在您的情况下,我注意到您使用的是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$'
    

    【讨论】:

    • 希望看到有关 MSBuild 和 MSDeploy 的简明教程。那里有很多信息,但是对于刚接触它的人来说,试图弄清楚是什么是非常困难的。没有人解释有两种部署方式,MSRemoteAgentServiceWeb Management Service(WMSVC),以及为什么您可能想要使用其中一个或。据我所知,有一种方法,我不断混淆用于 or 的语法。
    • Veru 有用@Sayed。谢谢!
    • @Sayed Ibrahim Hashimi:-source:contentPath="C:\temp\files-to-pub" 。您如何获得该文件夹:它是在命令MSBuild.exe D:\Web.csproj /T:Package /P:Configuration=Release 上创建的
    • Sayed,很抱歉在此问题上从未回复您,尽管我一直没有看到您的回复,但我总能找到多年来对您有很大帮助的文章和回复。感谢您间接为我提供的所有帮助。
    • AuthType='Basic' 对 iis 登录很重要(不是 windows auth)。我一直收到ERROR_USER_UNAUTHORIZED,直到我添加了这个
    猜你喜欢
    • 2023-02-08
    • 2016-04-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-02-08
    • 1970-01-01
    • 1970-01-01
    • 2018-05-17
    相关资源
    最近更新 更多