MSBuild可以使用集成身份验证进行部署还是仅基本部署

Tro*_*unt 36 msbuild msdeploy

我正在从MSBuild命令行将Web应用程序包部署到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=***
Run Code Online (Sandbox Code Playgroud)

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

令我特别沮丧的是,我可以愉快地在带有集成身份验证的软件包中运行deploy命令(只是不包含凭据),我似乎无法从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
Run Code Online (Sandbox Code Playgroud)

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

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

Tro*_*unt 30

答案是......

在我上面编辑了关于当前身份的用户名持久保存到MSDeploy命令后,即使未在原始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=
Run Code Online (Sandbox Code Playgroud)

然后生成以下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
Run Code Online (Sandbox Code Playgroud)

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