我正在从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属性?这似乎是现在唯一的障碍.
我尝试将IIS站点从Win2003服务器推送/同步到另一个.
这是我的命令:
msdeploy -verb:sync -source:metakey = lm/w3svc/68512112 -dest:metakey = lm/w3svc/68512112,computername = backup-09,username = Administrator,password = PASSWORD -whatif> msdeploysync.log
我也试过以下
msdeploy -verb:sync -source:metakey = lm/w3svc/68512112 -dest:metakey = lm/w3svc/68512112,computername = backup-09,username = BACKUP-09\Administrator,password = PASSWORD -whatif> msdeploysync.log
我也试过了
msdeploy -verb:sync -source:metakey = lm/w3svc/68512112 -dest:metakey = lm/w3svc/68512112,computername = backup-09,username = Administrator @ BACKUP-09,password = PASSWORD -whatif> msdeploysync.log
这是错误:
致命: 请求远程代理URL" http:// backup-09/MSDEPLOYAGENTSERVICE "失败.
致命: 远程服务器返回错误:(401)未经授权.致命数:1
谁能帮我?
我现在甚至为所有服务器设置了域控制器...仍然是相同的问题,无论我是以域控制器身份登录,还是提供本地帐户,所有变体都会触发401