38

我正在将 Web 应用程序包从 MSBuild 命令行部署到 IIS6 上的 MSDepSvc,使用基本身份验证的以下命令可以正常工作:

MSBuild.exe Web.csproj
  /p:Configuration=Debug
  /p:DeployOnBuild=True
  /p:DeployTarget=MSDeployPublish
  /p:MsDeployServiceUrl=http://[server name]/MsDeployAgentService
  /p:DeployIisAppPath=DeploymentTestProject
  /p:MSDeployPublishMethod=RemoteAgent
  /p:CreatePackageOnPublish=True
  /p:username=***
  /p:password=***

但是,我真正想做的是删除用户名和密码参数,并以当前用户的身份回退到集成身份验证。此命令将进入构建服务器,我不希望在目标环境(MsDepSvc 所需)上具有管理员权限的帐户的纯文本凭据可见。我找不到任何有关如何执行此操作的文档,并且在我尝试发布时丢弃凭据返回 401 未经授权。

尤其令人沮丧的是,我可以愉快地在带有集成身份验证的包中运行部署命令(只是不包括凭据),但我似乎无法从 MSBuild 命令行运行它。我试图在不编辑构建文件的情况下将包和部署过程封装到一个命令中,这是目前唯一的方法。

有什么想法吗?

编辑 在与 Sayed 讨论并深入研究命令行输出后,在执行上面的 MSBuild 命令(没有用户名和密码参数)之后,正在调用以下 MSDeploy 命令:

msdeploy.exe
  -source:package='[project path]\Web\obj\Debug\Package\Web.zip' 
  -dest:auto,ComputerName='http://[server]/MsDeployAgentService',UserName='***',IncludeAcls='False',AuthType='NTLM'
  -verb:sync
  -disableLink:AppPoolExtension
  -disableLink:ContentExtension
  -disableLink:CertificateExtension
  -retryAttempts=2

您可以看到正在设置 UserName 属性,其值是当前登录用户的用户名。如果我把它拿出来直接运行上面的命令,部署就很好了。

那么在此基础上,为什么原来的 MSBuild 命令在调用 MSDeploy 的时候会插入一个 UserName 属性呢?这似乎是现在唯一的障碍。

4

5 回答 5

34

而答案是……

在我上面对当前身份的用户名进行编辑之后,即使没有在原始 MSBuild 调用中传递,我也尝试重新构建参数以传递一个空的用户名,如下所示:

MSBuild.exe Web.csproj
  /p:Configuration=Debug
  /p:DeployOnBuild=True
  /p:DeployTarget=MSDeployPublish
  /p:MsDeployServiceUrl=http://[server name]/MsDeployAgentService
  /p:DeployIisAppPath=DeploymentTestProject
  /p:MSDeployPublishMethod=RemoteAgent
  /p:CreatePackageOnPublish=True
  /p:username=

然后生成以下 MSDeploy 命令:

msdeploy.exe 
  -source:package='[project path]\obj\Debug\Package\Web.zip' 
  -dest:auto,ComputerName='http://[server name]/MsDeployAgentService',IncludeAcls='False',AuthType='NTLM' 
  -verb:sync 
  -disableLink:AppPoolExtension 
  -disableLink:ContentExtension 
  -disableLink:CertificateExtension 
  -retryAttempts=2

此调用不再包括 UserName 属性。所以简而言之,如果你不向 MSBuild 调用添加用户名参数,它将插入当前身份并推迟到基本身份验证,这将失败,因为没有密码。如果您包含用户名参数但不给它一个值,则它根本不包含在 MSDeploy 命令中。

于 2010-11-19T02:13:38.047 回答
4

我查看了 Microsoft.Web.Publishing.targets 并看到了这个:

<PropertyGroup>
  <NormalizePublishSettings ...>
  <AuthType Condition="'$(AuthType)'==''" >Basic</AuthType>
  <!--Supported value for $(MSDeployPublishMethod): WMSVC, RemoteAgent, InProc-->
  <MSDeployPublishMethod ... >WMSVC</MSDeployPublishMethod>
  ...
</PropertyGroup>

Basic因此,从 MSBuild 运行时看起来默认是身份验证。然后我发现了这个http://technet.microsoft.com/de-de/library/dd569001(WS.10).aspx

authenticationType 指定要使用的身份验证类型。可能的值为 NTLM 和 Basic。如果指定了 wmsvc 提供程序设置,则默认身份验证类型为 Basic;否则,默认身份验证类型为 NTLM。

我还没有尝试过,但可能是这样的/p:AuthType=NTLM

于 2010-11-18T05:48:18.563 回答
1

我能够让 NTLM 按如下方式工作,其中该服务在 [服务器名称] 上具有管理员权限的帐户下运行。

"C:\Windows\Microsoft.NET\Framework\v4.0.30319\msbuild.exe" app\Test.Web\Test.Web.csproj /T:Clean /T:Package /P:Configuration=Release

C:\hudson\jobs\Test\workspace\app\Test.Web\obj\Release\Package\Test.Web.deploy.cmd /Y "/M:http://[服务器名称]/MSDEPLOYAGENTSERVICE" /A: ntlm -allowUntrusted

生成:

“C:\Program Files\IIS\Microsoft Web Deploy\msdeploy.exe”-source:package='C:\hudson\jobs\Test\workspace\app\Test.Web\obj\Release\Package\Test.Web。 zip' -dest:auto,computerName='http://[服务器名称]/MSDEPLOYAGENTSERVICE',authtype='ntlm',includeAcls='False' -verb:sync -disableLink:AppPoolExtension -disableLink:ContentExtension -disableLink:CertificateExtension - setParamFile:"C:\hudson\jobs\Test\workspace\app\Test.Web\obj\Release\Package\RapidPrototypeRequestSystem.Web.SetParameters.xml" -allowUntrusted

于 2012-07-02T15:16:46.853 回答
0

这行得通,我最初被目标文件分心,但意识到我的错误出现在连接字符串中,即试图使用 https 而不是 http。

MSBuild.exe Web.csproj /p:Configuration=Debug /p:DeployOnBuild=True /p:DeployTarget=MSDeployPublish /p:MsDeployServiceUrl=http://[serverName]/MsDeployAgentService /p:DeployIisAppPath=DeploymentTestProject /p:MSDeployPublishMethod=RemoteAgent /p:CreatePackageOnPublish=True /p:用户名=

于 2012-07-08T22:04:49.550 回答
0

将过程分为两个步骤对我有用 -

  1. 构建和打包

    msbuild.exe /p:DeployOnBuild=True /p:WebPublishMethod=Package /p:PackageAsASingleFile=true /p:AllowUntrustedCertificate=True /p:CreatePackageOnPublish=True /p:SkipExtraFilesOnServer=True /p:PublishProfile=DevProfile /p:Configuration=开发者

  2. 部署

    msdeploy.exe -source:package='C:\packagelocation\dev.zip' -dest:auto,ComputerName=' http://destinationserver/MsDeployAgentService ',IncludeAcls='False',AuthType='NTLM' -verb:sync -disableLink:AppPoolExtension -disableLink:ContentExtension -disableLink:CertificateExtension -retryAttempts=2

于 2019-12-18T22:32:52.613 回答