【问题标题】:WebDeploy with MSBuild Not Deploying from TeamCity使用 MSBuild 的 WebDeploy 未从 TeamCity 部署
【发布时间】:2013-01-09 13:11:13
【问题描述】:

我正在尝试使用 MSDeploy 将 MVC 项目部署到使用 TeamCity 的服务器。当我在 powershell 中的计算机上执行此操作时,使用以下命令:

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 构建步骤在同一个文件上使用相同的参数(来自同一个工作目录)运行它时,它会构建项目但不会发布它。相反,它具有来自构建过程的常规输出(CoreCompile、_CopyFilesMarkedCopyLocal、GetCopyToOutputDirectoryItems、CopyFilesToOutputDirectory),但实际上并没有发布任何内容。

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

(TeamCity 7.1、MSBuild 4.0、WebDeploy 3.0、Visual Studio 12、IIS 7。与my previous question 相关)

【问题讨论】:

  • 您能展示您的 PublishProfile 的任何部分吗?我们有一个很好的 WebDeploy 配置,但我们不使用 PublishProfile,我想看看我是否可以让我的配置适合你。
  • 在此处提供 PublishProfile 的净化版本:gist.github.com/7326d2a7f5523058d662
  • Yaakov,您当时是否放弃使用 PublishProfile 并改用附加参数?

标签: msbuild visual-studio-2012 teamcity msdeploy webdeploy


【解决方案1】:

我们使用配置如下的 TeamCity MSBuild 步骤执行 WebDeploy:

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,因此我无法提供任何指导。希望这会有所帮助。

【讨论】:

  • 没有db发布,只是根据构建配置在web.config中使用不同的连接字符串
  • 明白了。使用上述方法(也许使用 WebDeploy?)您可以免费获得的东西是它会为您执行Web.config transforms
  • 由于某种原因,WebDeploy 不会在同一解决方案中部署引用项目的 dll。
【解决方案2】:

我使用 MSBuild.exe 打包到 zip,并使用 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:sync : 使网站从源同步到目标

-source:package="C:\Build\MyAppName.Debug.zip" : source 是一个 MSBuild zip 文件包

-dest:auto,wmsvc=webservername :使用包文件中的设置部署到服务器。用户帐户是具有权限的操作系统级帐户。指定了主机名,但未指定 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"

这应该在您的本地 PC 和 CI 服务器上工作。

【讨论】:

  • 我可以接受,但我什至无法在当前步骤的构建输出中找到任何关于它在哪里生成然后可以部署的构建包的信息(这确实显示在我的计算机上如果我运行相同的命令而不指定VisualStudioVersion=11.0)
  • 您能否在安装了 TeamCity 的服务器上本地运行命令行?你可能会得到额外的输出。
【解决方案3】:

以下是最终对我有用的配置设置:

/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

【讨论】:

  • 我也不得不放弃使用 PublishProfile 而是使用上面的附加参数.. 真的很丢脸。不确定为什么我们不能在这种情况下使用 PublishProfiles?
【解决方案4】:

我遇到了完全相同的问题!我已将我使用过的解决方案发布在:MsBuild not finding publish profile

基础是:

  • 在构建服务器上安装 Azure SDK 1.8
  • 强制使用 /P:PublishProfileRootFolder 值以确保 MSBuild 可以找到发布配置文件

【讨论】:

  • 除了您的修复之外,我还必须添加一个值为 11.0 的 system.VisualStudioVersion 参数。我们在项目中混合使用了 Visual Studio 2012 和 2013,但只有 11.0 在 TeamCity 中工作。如果我将其设置为 12.0,则发布配置文件将再次被忽略。
【解决方案5】:

确保为 Visual Studio 安装了 Microsoft Web Developer Tools 功能。这在我的构建代理中丢失了,但是一旦我添加了它,TeamCity 构建就可以正常工作了。

【讨论】:

    【解决方案6】:

    当您的 MSBuild 目录中缺少构建目标路径时,可能会发生这种情况。不要试图让它们在每台开发人员机器上排队,而是从Nuget 安装目标。这样一来,无论他们的机器是如何设置的,对每个人来说都是一样的。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-11-06
      • 2014-04-06
      • 1970-01-01
      相关资源
      最近更新 更多