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

时间:2013-05-30 13:29:03

标签: powershell msbuild msdeploy webdeploy

仍然,我在MSBuild- / MSDeploy世界中摆弄,并且最近经常一直在摸不着头脑。

我希望能够仅构建一次Web应用程序项目并将其部署到多个配置。 我在Sayed I. Hashimi中找到了这个PackageWeb-Solution,它允许您在WAP中添加一个Nuget-Package,它将向生成的WebDeploy-Package添加其他文件。 (您实际上可以查看此5-Minute-Video以获取此帖子的基本知识。) 这些文件使我能够选择我想要的配置(实际上就在之前;-))发布;这样我可以在我的发布过程中选择我想要的web.config-Transform和一个"特殊的" (powershell-)脚本随Nuget-Package一起提供,它可以完美地发布项目。

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

1。首先尝试:本地部署

当我在本地尝试时,它可以工作。 我传递的参数是

  • 我要发布的转换
  • IIS Web应用程序名称
  • 计算机名称
  • 用户名
  • 密码
  • 允许不受信任的证书
  • WHATIF

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

  • IIS Web应用程序名称:DeployApp / DeployThis(DeployApp是我的IIS中的站点,DeployThis是在此站点上运行的实际应用程序)
  • 计算机名称:localhost
  • 用户名:someName
  • 密码:guesswhat
  • 允许不受信任的证书:true
  • whatif:false

在脚本的最后,我看到这导致以下命令:

"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应用程序名称
  • 计算机名称
  • 用户名
  • 密码 使其适合目的地环境。 (当然,在远程计算机上,帐户权限和服务安装是正确的)

所以我将这4个值改为

  • IIS Web应用程序名称:DeployApp / DeployThis(在这种情况下,IIS结构的设置方式与本地计算机相同)
  • 计算机名称:172.16.200.13
  • 用户名:someOtherName
  • 密码:haveAnotherGuess

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

"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地址是不够的,我不得不提供完成工作的目标服务的地址,所以我将计算机名称的设置从try 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

但我得到了另一个错误,这让我感到高兴,因为我正在查看我之前提到的那个错误数小时,并且怀疑自己和虚拟机上的服务配置但找不到任何内容:< / p>

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参数,在这种情况下,不应该提到实际的应用程序,而应该只给出站点名称(我想应用程序名称将以某种方式从包中获取& #39; s参数?也许有人可以为我清楚这一点

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

"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。后果 - 华友世纪和Meeeeh!在同一时间?

所以这就是我现在发现自己的地步;我得到了一个有效的命令,但不知道我怎么能让那个脚本为我生成那个。 实际上,我可以猜测如何调整脚本以满足我的要求,但不要认为它们是那么特别,除了每次生成WebDeploy-Package时生成脚本所以只改变了生成的脚本不会给我带来很多好处。 这样你就可以在那个脚本中看到尝试&#34; Publish-Interactive.ps1&#34;在第371行,它说

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

我可以&#34; hack&#34;这只是在这个用例中为我工作生成msdeploy命令,如果我将其更改为

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

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

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

总结一下:

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

希望有人了解我的问题并提供帮助。 提前感谢任何通过这篇文章工作的人;)

1 个答案:

答案 0 :(得分:1)

好吧,因为它确实是一个问题,这个脚本远程部署到“嵌套”的站点应用程序结构中。

Posted issue on the project's site