我正在从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属性?这似乎是现在唯一的障碍.
我继承了一个非常大的VS2012网站项目(不是Web应用程序),我正在尝试自动化它的部署.项目中有大量的循环引用,所以要使用aspnet_compiler.exe进行预编译我必须打开fixednames.问题是它导致我的四核,16gb ram,ssd开发者机器上的构建需要大约20分钟.之前的开发人员不必处理这个问题,因为他只是将整个源代码复制到生产Web服务器上.
所以在我解决循环引用问题之前,我想至少使用msdeploy自动部署项目.我可以使用visual studio中的发布配置文件,它完全符合我的要求:
我无法弄清楚我的生活是如何让MSBuild.exe做同样的事情!
MSBuild.exe WebProject.vs2012.sln /m /T:Build
/p:Configuration=Release`;DeployOnBuild=true`;PublishProfile=TestDeploy
Run Code Online (Sandbox Code Playgroud)
上面的命令仍然尝试执行aspnet_compiler,这不是我想要的.发布配置文件说不应该预编译...但在日志中我看到它正在执行它.
那么:如何在不预编译的情况下使用msbuild部署网站项目?
asp.net msbuild vs-web-site-project msdeploy visual-studio-2012
如何在IIS 10 W2016上安装Web部署?
到目前为止我已经尝试过
是否有良好的模式可以将解决方案配置映射到环境并使用MsDeploy进行每个环境的打包?
最短版本:抓取此文件,并尝试更改.msbuild文件,以便创建包.
我有一个包含大量库和ASP.NET MVC应用程序的解决方案.我使用msbuild文件驱动构建,该文件调用主解决方案,然后执行其他操作.我想使用新的msdeploy包来准备一个.zip文件供以后分发,但我遇到了各种各样的困难.
我的解决方案有4种配置:Local
,Dev
,Test
,和Prod
,符合我要地图的环境哪个.在该解决方案中,所有库都具有通常的模式Debug
和Release
模式.例如,在Local
解决方案模式下,所有库都以Debug
模式编译.然后,主应用程序具有与解决方案匹配的环境,因此我可以拥有Web.Dev.config
等等,这似乎是使用事物的自然方式.
如果我打包像这样:
<Target Name="BuildWebPackage">
<MSBuild Projects="..\Publisher\Site\Site.vbproj"
Targets="Package"/>
</Target>
Run Code Online (Sandbox Code Playgroud)
我遇到的问题Configuration=Local
是错误地映射到Site.vbproj
引用的库项目,并且它无法编译它们.
我看到了两种可能的解决方案:一种是我无法正常工作,另一种是非常难看.
我尝试Package
通过解决方案调用目标(在此示例中,"Applications"是Site项目所在的解决方案文件夹...我已经简化了这篇文章,因为解决方案中实际上有多个应用程序.)
<Target Name="BuildWebPackage">
<MSBuild Projects="..\Publisher\Publisher.sln"
Targets="Applications\Site:Package"/>
</Target>
Run Code Online (Sandbox Code Playgroud)
我认为这种SolutionFolder\ProjectName:Target
语法是如何做到的,因为:Clean
运行...但是,这会抛出
error MSB4057: The target "Applications\Site:Package" does not exist in the project.
Run Code Online (Sandbox Code Playgroud)
现在对于丑陋的解决方案:如果我修改所有库,为这4种解决方案配置提供4个额外配置,它就可以工作.但是,如果我想稍后与具有不同环境的项目共同开发共享库,那么这是一个丑陋而且实际上是一个糟糕的计划.此外,这些环境与库无关,只有在使用库的顶级应用程序的上下文中才有意义.口味不好.
我喜欢解决方案中的多个环境,以及花哨的新Web.config替换东西,但我不知道如何Package
在这种情况下调用msdeploy 任务,因此我可以在TeamCity中构建包.
(注意,我可能不想调用msdeploy命令行,因为它用于将IIS应用程序转换为包.不是我在这里做的.)
再一次,我已经完全被困在这里,所以如果你想帮助实验,我已经把这个样本解决方案放在一起了.
我最近在VS2010中一直使用配置转换,但是为什么有些转换直接应用于包中的Web.config,但是其他转换存储在SetParameters.xml中的令牌然后应用于发布时.
例如,使用以下连接字符串和应用程序设置获取Web.config:
<connectionStrings>
<add name="AutoDeployDb" connectionString="Data Source=(local);Initial Catalog=AutoDeploy;User ID=AutoDeployUser;Password=Passw0rd"/>
</connectionStrings>
<appSettings>
<add key="ChartImageHandler" value="storage=file;timeout=20;dir=c:\TempImageFiles\;" />
</appSettings>
Run Code Online (Sandbox Code Playgroud)
那么这是当前构建配置的相应配置转换:
<connectionStrings>
<add xdt:Transform="Replace" xdt:Locator="Match(name)" name="AutoDeployDb" connectionString="Data Source=MyDevServer;Initial Catalog=AutoDeploy;User ID=AutoDeployUser;Password=s*#@Kdsl" />
</connectionStrings>
<appSettings>
<add xdt:Transform="Replace" xdt:Locator="Match(key)" key="ChartImageHandler" value="storage=file;timeout=20;dir=d:\inetpub\AutoDeploy\TempImageFiles\"/>
</appSettings>
Run Code Online (Sandbox Code Playgroud)
这些都是"替换"变换,而不是一个是在"名称"上匹配的连接字符串,另一个是与"密钥"匹配的应用程序设置,在我看来它们是相同的.
现在查看结果包中的SetParameters.xml文件,只有连接字符串具有setParameter节点.在PackagTmp文件夹的Web.config中,应用设置转换已应用,而连接字符串具有"$(ReplacableToken_AutoDeployDb-Web.config Connection String_0)"值,该值仅在部署包时应用.
为什么是这样?它是连接字符串特有的东西(或相反,应用程序设置)?我很欣赏这种方法的基本原理,我不清楚为什么它适用于某些设置而不适用于其他设置.
任何人都可以对此有所了解吗?
我刚刚开始使用团队构建功能,而且我发现做一些非常简单的事情需要大量的事情.我目前的设置是一个带有Web应用程序,组装应用程序和测试应用程序的解决方案.Web应用程序具有PublishProfile设置,可通过文件系统发布.
我有一个TFS构建定义设置,它目前每晚构建整个解决方案并将其作为旧构建的备份放到网络共享上.我现在要做的就是拥有PublishProfile我已经设置为我发布Web应用程序.我确定这很简单,但我已经玩了一整天的MSBuild命令而没有运气.救命!
我使用Visual Studio来创建发布配置文件.它将该信息保存到MyProject.Publish.xml,它位于项目目录的根目录中.
我希望在我的CI服务器上执行的MSBuild任务将该文件用作其基本设置.理想情况下,如果我可以通过命令行参数覆盖属性,那就会摇滚.
这可能吗?如果是这样,语法是什么?
例如,我正在寻找类似的东西:
MSBuild MyProject.csproj /P:UsePublishProfile=True /P:UserName=deployUser /P:Password=MyPassword
Run Code Online (Sandbox Code Playgroud) 我正在尝试使用Team Build 2010部署到Windows Server 2008 R2 Web服务器.我的构建服务器代理设置为在Windows域帐户下运行.我已使用IIS管理器权限在我的Web服务器上成功授予此域帐户权限以进行部署.此帐户不是 Web服务器上的管理员.我可以使用以下参数使构建部署正常:
/p:DeployOnBuild=True
/p:DeployTarget=MsDeployPublish
/p:CreatePackageOnPublish=False
/p:MSDeployPublishMethod=WMSVC
/p:AllowUntrustedCertificate=True
/p:MSDeployServiceUrl=webservername
/p:DeployIisAppPath="Web Site Name"
/p:UserName=DOMAIN\BUILDID
/p:Password=buildidpassword
Run Code Online (Sandbox Code Playgroud)
因为其他开发人员将要设置他们的构建,我宁愿不发布域帐户的密码,我需要使用NTLM身份验证进行部署.我想继续使用Web管理服务方法(WMSVC)进行部署,因此BUILDID不必是管理员.
我深入研究了"Microsoft.Web.Publishing.targets",看来我应该能够传递一个AuthType参数来控制授权类型,但似乎没有任何效果.我试过了:
/p:DeployOnBuild=True
/p:DeployTarget=MsDeployPublish
/p:CreatePackageOnPublish=False
/p:MSDeployPublishMethod=WMSVC
/p:AllowUntrustedCertificate=True
/p:MSDeployServiceUrl=webservername
/p:DeployIisAppPath="Web Site Name"
/p:AuthType=NTLM
Run Code Online (Sandbox Code Playgroud)
而且我也尝试了一个空白的用户名(如StackOverflow上的其他地方所见),但无济于事.我继续得到错误:
C:\Program Files (x86)\MSBuild\Microsoft\VisualStudio\v10.0\Web\Microsoft.Web.Publishing.targets(3847,5)
:错误:Web部署任务失败.(使用Web管理服务连接到目标计算机("webservername"),但无法授权.请确保您使用的是正确的用户名和密码,即您要连接的站点存在,并且凭据代表有权访问该站点的用户.)
我也尝试过UseMsdeployexe
上一个链接中提到的参数,但后来我得到了与web.config转换相关的其他错误.看起来问题已经出现在Microsoft Connect上,并且在下一期中列为已修复.
我正在使用Team city中的MSBuild运行器来构建我的项目并将其部署到临时环境.一切都很完美,除了它不断移除位于项目根目录中的我的存储库文件夹.
在Visual Studio 2010中,发布配置文件对话框中有一个复选框,显示"在目标上保留额外文件(不要删除)"
有没有办法用MSBuild完成同样的事情?
<Target Name="Deploy" DependsOnTargets="Build;Test">
<MSBuild Projects="MyProject.sln" Properties="Configuration=$(Configuration); username=username; password=password; DeployOnBuild=True; DeployTarget=MSDeployPublish; MSDeployPublishMethod=WMSVC; MSDeployServiceUrl=https://DEVWEB01:8172/MsDeploy.axd; DeployIISAppPath=MyProject.$(Configuration); AllowUntrustedCertificate=True;"/>
</Target>
Run Code Online (Sandbox Code Playgroud) 在尝试使用不是目标服务器上的本地管理员的Windows用户远程部署应用程序时,我使用NTLM身份验证从MsDeploy收到未经授权的错误.我在目标框上的管理服务委派中设置了规则,并检查了所有提供程序.根据此规则,我添加了2个具有允许权限的用户('*',以及正在进行远程部署的我的Windows用户).此外,我已经在我正在尝试部署的网站上授予了Windows用户权限.如果我将Windows用户设置为目标框上的本地管理员并设置"允许管理员绕过规则",则部署正常.如果Windows用户不是本地管理员,则会收到以下错误:
Web部署任务失败.(无法联系远程代理(URL http:// xxxxxxxx/MSDEPLOYAGENTSERVICE).确保在目标计算机上安装并启动了远程代理服务.)确保站点名称,用户名和密码是正确的.如果问题仍未解决,请与您当地或服务器管理员联系.错误详细信息:无法联系远程代理(URL http:// xxxxx/MSDEPLOYAGENTSERVICE).确保在目标计算机上安装并启动了远程代理服务.收到了不受支持的回复.响应标题'MSDeploy.Response'为'V1',但预计为'v1'.远程服务器返回错误:(401)未经授权.在Microsoft.Web.Publishing.targets(3588,5)
msdeploy ×10
msbuild ×9
tfs ×2
webdeploy ×2
.net ×1
asp.net ×1
iis ×1
iis-10 ×1
package ×1
publish ×1
publishing ×1
release ×1
team-build ×1
tfs2010 ×1
web-config ×1