2013-01-09 150 views
9

我想使用MSDeploy将MVC项目部署到使用TeamCity的服务器。当我在PowerShell中这样做我的电脑上,使用以下命令:WebDeploy MSBuild不从TeamCity部署

msbuild.exe .\mvc.csproj /p:PublishProfile=DevServer /p:VisualStudioVersion=11.0 
/p:DeployOnBuild=True /p:Password=MyPassword /p:AllowUntrustedCertificate=true 

它生成项目并将其部署到服务器(信息在DevServer定义发布配置文件)完美。输出结果显示MSDeployPublish部分,其中我看到Starting Web deployment task from source...等文本,然后用行告诉我哪些文件已更新等。

当我在TeamCity上运行此操作时,使用MSBuild Build步骤,在相同文件,具有相同的参数(来自同一工作目录),它构建项目但不发布它。相反,它具有构建过程(CoreCompile,_CopyFilesMarkedCopyLocal,GetCopyToOutputDirectoryItems,CopyFilesToOutputDirectory)的常规输出,但实际上并不会发布任何内容。

我需要对TeamCity中的设置进行哪些更改才能让它以与我的计算机上使用MSBuild相同的方式发布部署?

(TeamCity的7.1,4.0的MSBuild,WebDeploy 3.0时,Visual Studio 12,IIS 7.有关my previous question

+1

你可以显示PublishProfile的任何部分吗?我们已经有了一个很好的WebDeploy配置,但是我们不使用PublishProfile,我想看看我能否让我适合你。 –

+0

PublishProfile的消毒版本可以在这里找到:https://gist.github.com/7326d2a7f5523058d662 –

+0

Yaakov,你放弃了使用PublishProfile然后使用额外的参数吗? –

回答

10

我们尽我们与被配置为TeamCity的MSBuild的一步WebDeploys如下:

Build File Path: Server.csproj 

Command Line Parameters: 
/p:Configuration=%configuration% 
/p:DeployOnBuild=True 
/p:DeployTarget=MSDeployPublish 
/p:MsDeployServiceUrl=https://%web.deploy.server%:8172/MsDeploy.axd 
/p:DeployIisAppPath=%web.deploy.site% 
/p:AllowUntrustedCertificate=True 
/p:Username= 
/p:AuthType=NTLM 

我们使用集成身份验证;根据需要进行更改以符合您的方案。我认为,这个价值在于它从头开始构建所有东西,而不依赖于预先构建的软件包。从你发布的要点,我注意到你做了一些数据库发布,我们不使用WebDeploy,所以我不能提供任何指导。希望这可以帮助。

+0

没有数据库发布,只需在web.config中使用不同的连接字符串,具体取决于构建配置 –

+0

难题。通过上述方法免费获得的东西(也可以使用WebDeploy?)是它将执行[Web.config转换](http://msdn.microsoft.com/zh-cn/library/dd465318。 aspx)给你。 –

9

我使用MSBuild.exe打包到拉链,并MSdeploy.exe到在分开的步骤中部署。

要部署在命令行上的package.zip文件:

"C:\Program Files\IIS\Microsoft Web Deploy V2\msdeploy.exe" -verb:sync 
    -source:package="C:\Build\MyAppName.Debug.zip" 
    -dest:auto,wmsvc=webservername,username=webdeploy,password=******* 
    -allowUntrusted=true 

该命令也值得在详细解释:

-verb:同步:使从所述源到网站同步目的地

-source:包= “C:\生成\ MyAppName.Debug.zip”:源是一个MSBuild压缩文件包

-dest:自动,WMSVC = webservername:U请将包文件中的设置部署到服务器。用户帐户是具有权限的操作系统级帐户。指定主机名,但不指定IIS网站名称(以前在项目属性中的MSBuild项目文件中指定)。

您可以根据您的配置修改参数。我喜欢这样,因为使用单独的步骤,它更容易调试问题。

使用TeamCity构建步骤和命令行参赛者。

更新: 如果你想如何构建使用的MSBuild ZIP包为例,尝试这样的事情:

"C:\Windows\Microsoft.NET\Framework\v4.0.30319\MSBuild.exe" 
MyWebApp/MyWebApp/MyWebApp.csproj 
/T:Package 
/P:Configuration=Debug;PackageLocation="C:\Build\MyWebApp.Debug.zip" 

这应该同你的本地计算机上,以及在CI服务器。

+0

我可以这样做,但我什至不能在我当前步骤的构建输出中找到它生成构建包的地方,然后可以部署它(如果我没有运行相同的命令,指定'VisualStudioVersion = 11.0') –

+0

你可以在服务器上安装TeamCity的本地命令行上运行吗?你可能会得到额外的输出。 –

4

下面是配置设置,终于为我工作:

/p:Configuration=CONFIG-NAME 
/p:DeployOnBuild=True 
/p:DeployTarget=MSDeployPublish 
/p:MsDeployServiceUrl=http://SITE-URL/MsDeployAgentService 
/p:username="USERNAME" 
/p:password=PASSWORD 
/p:AllowUntrustedCertificate=True 
/P:CreatePackageOnPublish=True 
/p:DeployIisAppPath=SITE-URL 
/p:MSDeployPublishMethod=RemoteAgent 
/p:IgnoreDeployManagedRuntimeVersion=True 
+0

我也不得不放弃使用PublishProfile,而是使用上面的其他参数..真的很遗憾。不确定为什么我们不能在这种情况下使用PublishProfiles? –

0

我有完全一样的问题!我已使用了超过了解决方案:MsBuild not finding publish profile

基础是:

  • 构建服务器上安装Azure的SDK 1.8
  • 强制/ P:PublishProfileRootFolder值,以确保能的MSBuild的定位发布配置文件
+0

除了你的修复,我不得不添加一个值为11.0的system.VisualStudioVersion参数。我们在项目中使用了Visual Studio 2012和2013的混合版本,但在TeamCity中仅使用了11.0。如果我将其设置为12.0,则发布配置文件会再次被忽略。 –

0

确保您已为Visual Studio安装Microsoft Web Developer Tools功能。这在我的构建代理上是缺失的,但是一旦我添加了它,TeamCity构建工作得很好。