【问题标题】:How to set destination website on MSDeploy.exe command line如何在 MSDeploy.exe 命令行上设置目标网站
【发布时间】:2014-01-30 03:08:08
【问题描述】:

我有一个要部署到远程服务器的 Web Deploy 3.5 包。如何在 MSDeploy.exe 命令行中指定站点名称?

这是我目前所拥有的:

C:\Program Files (x86)\IIS\Microsoft Web Deploy V3\msdeploy.exe
    -source:package='package.zip' 
    -dest:auto,computerName="ServerName",includeAcls="False" 
    -verb:sync 
    -disableLink:AppPoolExtension 
    -disableLink:ContentExtension 
    -disableLink:CertificateExtension 
    -setParamFile:"package.SetParameters.xml"

但是站点的名称是在package.SetParamters.xml 文件中指定的,我更愿意在命令行中设置它。我要部署此包的一些地方是位于同一服务器上的不同站点,例如我们的 Stage 和 UAT 站点。

我查看了使用此处描述的 iisApp 和 appHostConfig 提供程序: http://technet.microsoft.com/en-us/library/dd569040%28v=ws.10%29.aspx

但我无法将它们与包文件结合使用。

【问题讨论】:

    标签: msdeploy webdeploy


    【解决方案1】:

    您可以使用setParam 覆盖它:

    msdeploy.exe
        -source:package='package.zip' 
        -dest:auto,computerName="ServerName",includeAcls="False" 
        -verb:sync 
        -disableLink:AppPoolExtension 
        -disableLink:ContentExtension 
        -disableLink:CertificateExtension 
        -setParamFile:"package.SetParameters.xml"
        -setParam:name="IIS Web Application Name",value="site name"
    

    【讨论】:

    • 我很难让 msdeploy 接受“IIS Web 应用程序名称”字符串。它没有正确解析引号。
    • @dthrasher - Powershell?
    • 实际上,我在我的持续集成服务器 TeamCity 中使用命令行运行程序。所以我目前没有在 PowerShell 环境中执行此操作。但它一直试图在“IIS Web 应用程序名称”之间的空格上拆分参数。
    • 我在拆分参数方面遇到了同样的问题,斯科特的回答似乎可以解决这个问题。
    • 我发现如果我也使用 setParamFile,setParam 不允许我覆盖自定义的必需参数。我有一个只使用 setParam 的工作 msdeploy.exe 命令行,但是一旦我将 setParamFile 附加到它,它就会抱怨各种必需的自定义参数,即“参数不能为空或为空”。如果我删除 setParam 项并将它们放入 SetParameters.xml,那么它会再次起作用。但似乎你不能同时拥有两者,至少不能使用必需的自定义参数。
    【解决方案2】:

    要在 Powershell 中执行相同的操作(请参阅 Richard Szalay's answer),您必须对命令行参数处理稍加小心——尤其是在涉及空格的情况下。我发现最好将它们作为数组传递,其中所需的命令行参数在空格字符上有效分割。请注意,下面的行以逗号分隔,并且参数名称“IIS Web 应用程序”也被拆分。为了提高可读性,我把那个放在一行上。

    $msdeploy = "C:\Program Files (x86)\IIS\Microsoft Web Deploy V3\msdeploy.exe";
    
    $msdeployArguments = 
        '-source:package="package.zip"',
        '-dest:auto,computerName="<ServerName>",includeAcls="False"',
        '-verb:sync',
        '-disableLink:AppPoolExtension',
        '-disableLink:ContentExtension',
        '-disableLink:CertificateExtension',
        '-setParam:name="IIS', 'Web', 'Application', 'Name",value="<WebsiteName>"'
    
    & $msdeploy $msdeployArguments
    

    更新

    当我返回参数化网站名称时遇到问题。因为我对字符串使用了单引号,所以我选择使用连接而不是string interpolation。不幸的是,分隔数组中元素的逗号似乎已经在连接之前进行了评估。结果是,我不是在数组元素中连接字符串,而是将新元素连接到数组。我的解决方案是使用括号将数组元素括起来并强制首先执行连接。

    $msdeployArguments = 
        '-source:package="package.zip"',
        ('-dest:auto,computerName="' + $webServerName + '",includeAcls="True"'),
        '-verb:sync',
        '-disableLink:AppPoolExtension',
        '-disableLink:ContentExtension',
        '-disableLink:CertificateExtension',
        '-setParam:name="IIS', 'Web', 'Application', ('Name",value="' + $websiteName + '"');
    

    【讨论】:

    • 哇。太疯狂了。谢谢你的提示!我从来没有想过使用参数数组来解决空白问题。
    • 我可以设置参数:-setParam:kind=ProviderPath,scope=iisApp,value=YourSiteName
    • 我这样指定:$siteNameParam='name="IIS Web Application Name",value="Default Web Site/TestService"' 并使用它:msdeploy -verb:sync -source:package="pack/infoservice.wcf.zip" -dest:auto,computerName=iis-dtp -setParam:$siteNameParam
    【解决方案3】:

    我已经尝试了这里的所有答案(基本上所有来自互联网的答案),但没有一个对我有用。不知道为什么。 然后我找到了this 页面,该页面解释了如何使用 MSDeploy 进行备份(我只是将其反转以用于部署)。秘密来源是“contentPath”。这有点误导,因为在这种情况下不是磁盘上的路径(但是我已经看到使用它传递托管站点物理路径的示例)。但我不想使用物理路径。而且你不必!诀窍是:它可以包含网站或子站点(在 IIS yoursite.com/shop 中,所以我猜它是 IIS 中的路径)名称。

    用于备份:

    msdeploy –verb:sync -source:contentPath="yoursite.com" -dest:package=c:\Backups\yoursite.zip
    

    用于部署:

    msdeploy –verb:sync -source:package=c:\Deployment\yoursite.zip -dest:contentPath="yoursite.com"
    

    我在 declareParam、setParam 等上浪费了将近一天的时间......然而它是如此简单!

    希望对你有帮助...

    【讨论】:

    • 也帮助了我。 Web 部署服务 url 中的“站点”查询字符串和 -setParam 名称都不适合我。谢谢你,先生!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-08-20
    • 2020-08-21
    • 2011-10-30
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多