我需要将哪些参数传递给 PackageWeb powershell 脚本才能将其部署到我的远程计算机

2023-12-02

尽管如此,我还是在 MSBuild-/MSDeploy-world 中闲逛,并且最近经常摸不着头脑。

我希望能够仅构建一次 Web 应用程序项目并将其部署到多个配置。 我找到了这个PackageWeb解决方案来自 Sayed I. Hashimi,它使您能够将 Nuget-Package 添加到 WAP,从而将其他文件添加到生成的 WebDeploy-Package。 (实际上你可以看看这个5 分钟视频了解这篇文章的基础知识。) 这些文件使我能够在(实际上就在;-))发布时选择我想要的配置;这样我就可以在发布过程中选择我想要的 web.config-Transform 以及随该 Nuget-Package 附带的“特殊”(powershell-) 脚本,从而发挥魔力并使用该转换发布项目。

所以我现在的实际问题是这个脚本的执行。 因此,如果您实际上熟悉 PackageWeb,您可能不需要阅读下面的完整故事,而是跳到问题真正开始的第 3 部分。

1. 第一次尝试:本地部署

当我在本地尝试时,它有效。 我为此传递的参数是

  • 我要发布的转换
  • IIS Web 应用程序名称
  • 计算机名称
  • Username
  • Password
  • 允许不受信任的证书
  • whatif

所以我选择我想要的转换并设置

  • IIS Web 应用程序名称:DeployApp/DeployThis(DeployApp 是我的 IIS 中的站点,DeployThis 是在此站点上运行的实际应用程序)
  • 计算机名称:本地主机
  • 用户名:someName
  • 密码:猜猜看
  • 允许不受信任的证书:true
  • 如果:假的

在脚本的末尾,我看到以下命令的结果:

"C:\Program Files\IIS\Microsoft Web Deploy V3\msdeploy.exe"
    -verb:sync 
    -source:archiveDir="C:\Users\someName\AppData\Local\Temp\DeployDBVariantion00_zip" 
    -dest:auto,includeAcls='False',Username=someName,Password=guesswhat,AuthType='NTLM' 
    -disableLink:AppPoolExtension
    -disableLink:ContentExtension 
    -disableLink:CertificateExtension
    -setParamFile:"C:\Users\someName\AppData\Local\Temp\DeployDBVariantion00_zip\SetParameters.xml"  
    -skip:objectName=dirPath,absolutePath="_Deploy_" 
    -skip:objectName=filePath,absolutePath=web\..*\.config 
    -skip:objectName=dirPath,absolutePath=_Package 
    -skip:objectName=filePath,absolutePath=.*\.wpp\.targets$ -allowUntrusted

它部署了!没有错误,没有警告,只是纯粹的本地部署乐趣:)。

2. 第二次尝试:远程部署

现在,最困难的部分是:我正在尝试部署到我在 VirtualBox 中设置的远程计算机。

因此,理论上,如果我只应用所需的调整,我应该能够在远程计算机上执行相同的操作

  • IIS Web 应用程序名称
  • 计算机名称
  • Username
  • 密码 使其适合目的地环境。 (当然,假设该远程计算机上的帐户权限和服务安装是正确的)

所以我将这 4 个值更改为

  • IIS Web 应用程序名称:DeployApp/DeployThis(在本例中,IIS 结构的设置方式与我的本地计算机相同)
  • 计算机名称:172.16.200.13
  • 用户名:someOtherName
  • 密码:有另一个猜测

在脚本的末尾,我看到这会导致这个稍微不同的命令:

"C:\Program Files\IIS\Microsoft Web Deploy V3\msdeploy.exe"
    -verb:sync -source:archiveDir="C:\Users\someName\AppData\Local\Temp\DeployDBVariantion00_zip" 
    -dest:auto,includeAcls='False',ComputerName='172.16.200.13?site=DeployApp/DeployThis',Username=someOtherName,Password=haveAnotherGuess,AuthType='BASIC'
    -disableLink:AppPoolExtension
    -disableLink:ContentExtension
    -disableLink:CertificateExtension
    -setParamFile:"C:\Users\someName\AppData\Local\Temp\DeployDBVariantion00_zip\SetParameters.xml" 
    -skip:objectName=dirPath,absolutePath="_Deploy_"
    -skip:objectName=filePath,absolutePath=web\..*\.config
    -skip:objectName=dirPath,absolutePath=_Package
    -skip:objectName=filePath,absolutePath=.*\.wpp\.targets$
    -allowUntrusted

并退出并显示以下消息:

Could not connect to the remote computer ("Some.IP.-.Address")
On the remote computer, make sure that Web Deploy is installed and that the required process ("Web Management Service") is started.
Learn more at: http://go.microsoft.com/fwlink/?LinkId=221672#ERROR_DESTINATION_NOT_REACHABLE.)

这让我相信我的虚拟机出现了某种配置问题,并发布了这篇文章question.

3. 第三次尝试 - 又一个错误消息,HURRAY,这不是同一个错误

所以我挖了一下,发现对于远程部署来说,仅仅在脚本中将计算机名称设置为目标的 IP 地址是不够的,我必须提供完成这项工作的目标服务的地址,所以我改变了我的计算机名称的设置从尝试 2 到

  • 计算机名称:https://172.16.200.13:8172/msdeploy.axd

这次生成的命令如下所示:

"C:\Program Files\IIS\Microsoft Web Deploy V3\msdeploy.exe"
    -verb:sync
    -source:archiveDir="C:\Users\someName\AppData\Local\Temp\DeployDBVariantion00_zip" 
    -dest:auto,includeAcls='False',ComputerName='https://172.16.200.13:8172/msdeploy.axd?site=DeployApp/DeployThis',Username=someOtherName,Password=haveAnotherGuess,AuthType='BASIC'
    -disableLink:AppPoolExtension
    -disableLink:ContentExtension
    -disableLink:CertificateExtension
    -setParamFile:"C:\Users\someName\AppData\Local\Temp\DeployDBVariantion00_zip\SetParameters.xml"
    -skip:objectName=dirPath,absolutePath="_Deploy_"
    -skip:objectName=filePath,absolutePath=web\..*\.config
    -skip:objectName=dirPath,absolutePath=_Package
    -skip:objectName=filePath,absolutePath=.*\.wpp\.targets$
    -allowUntrusted

但是我遇到了另一个错误,这让我有些高兴,因为我花了几个小时查看之前提到的错误,怀疑自己和虚拟机上的服务配置,但找不到任何东西:

Web deployment task failed.
(Could not connect to the remote computer ("Some.IP.-.Address") using the specified process ("Web Deployment Agent Service") because the server did not respond.
Make sure that the process ("Web Deployment Agent Service") is started on the remote computer.
Learn more at: http://go.microsoft.com/fwlink/?LinkId=221672#ERROR_COULD_NOT_CONNECT_TO_REMOTESVC.)

4. 第四次尝试 - 摆弄生成的命令

因此,经过更多的挖掘后,我感到很幸运,可以尝试对生成的 msdeploy-command 进行一些手动调整。我在 SO 上的一些帖子中发现,在这种情况下,对于 msdeploy 的 ComputerName 参数,不应提及实际的应用程序,而只应给出站点名称(我猜应用程序名称将以某种方式从包的参数?也许有人也可以帮我弄清楚)

所以我最终尝试了这个稍微修改过的命令:

"C:\Program Files\IIS\Microsoft Web Deploy V3\msdeploy.exe"
    -verb:sync
    -source:archiveDir="C:\Users\someName\AppData\Local\Temp\DeployDBVariantion00_zip" 
    -dest:auto,includeAcls='False',ComputerName='https://172.16.200.13:8172/msdeploy.axd?site=DeployApp',Username=someOtherName,Password=haveAnotherGuess,AuthType='BASIC'
    -disableLink:AppPoolExtension
    -disableLink:ContentExtension
    -disableLink:CertificateExtension
    -setParamFile:"C:\Users\someName\AppData\Local\Temp\DeployDBVariantion00_zip\SetParameters.xml"
    -skip:objectName=dirPath,absolutePath="_Deploy_"
    -skip:objectName=filePath,absolutePath=web\..*\.config
    -skip:objectName=dirPath,absolutePath=_Package
    -skip:objectName=filePath,absolutePath=.*\.wpp\.targets$
    -allowUntrusted

现在实际上已经完成了部署!

5. 后果 - 万岁,喵喵!同时?

所以这就是我现在的处境;我得到了一个有效的命令,但不知道如何让该脚本为我生成该命令。 好吧,实际上我可以猜测如何调整该脚本以满足我的要求,但不要认为它们那么特别,除了每次生成 WebDeploy-Package 时都会生成脚本,因此只需更改生成的脚本不会给我带来太多好处。 只是为了让您也可以看到该尝试,在第 371 行的脚本“Publish-Interactive.ps1”中,它说

$compNameCommandFrag = ",ComputerName='{0}?site={1}'" -f $compNameFixedUp, $siteNameParam.Value

我可以“破解”它,使其在这个用例中为我工作,以生成 msdeploy 命令,如果我将其更改为

$compNameCommandFrag = ",ComputerName='{0}?site=DeployApp'" -f $compNameFixedUp#, $siteNameParam.Value

但我们可能都同意,如果我将该 Nuget-Package/脚本安装到多个项目中,这很脏,显然不是我想要做的。

这让我很困惑,因为我一直觉得我使用脚本的方式是错误的。另一种可能性是脚本本身有缺陷或者根本不适合我的目的。 我将其发布在这里,因为我拒绝相信脚本本身有缺陷,而且我真的不认为我的用例有那么特别。

总结一下:

我正在寻找需要做什么才能正确设置 powershell 脚本提示的参数以实现我上面描述的内容的答案(仍然假设这是我这边的配置问题,而不是 Nuget-Package 本身的错误)。

希望有人理解我的问题并提供帮助。 预先感谢所有完成这篇文章的人;)


好吧,事实证明,这确实是该脚本在远程部署到“嵌套”站点应用程序结构中时遇到的问题。

在项目网站上发布问题

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

我需要将哪些参数传递给 PackageWeb powershell 脚本才能将其部署到我的远程计算机 的相关文章

随机推荐