使用TFS 2015 Build构建和部署Web应用程序

16
我们刚刚在本地安装了TFS 2015(更新1),并尝试使用新的TFS构建系统创建持续集成/构建系统。构建工作正常,并且给出绿灯,但是当我查看默认构建时,它仅从bin目录中构建了二进制文件,并且似乎没有简单的方法将应用程序部署到本地服务器上。
有两个部署选项,即文件系统复制和PowerShell脚本,肯定可以轻松地使用它们将文件复制到新服务器,但由于构建仅构建了二进制文件,因此我不知道是否有工具可收集Web部件(cshtml、图像、脚本、css等)。
经过详尽的谷歌搜索,我只找到了一篇讨论此问题的文章:

http://www.deliveron.com/blog/building-websites-team-foundation-build-2015/

然而,这种方式使用WebDeploy会创建一个比较混乱的部署包。我该如何以最简单的方式将网站(标准MVC Web应用程序,实际上我的测试是使用创建项目向导创建的默认样板网站)连同工件一起部署到本地服务器?我不想在服务器上安装WebDeploy,而是更愿意使用PowerShell或其他工具来部署最终的工件。构建只是标准的Visual Studio构建模板,有4个步骤(构建、测试、索引和发布、发布构建工件)。

这个对你来说怎么样?我正在尝试确保如果以下测试步骤失败,部署不会发生。你能做到吗? - one.beat.consumer
1
@one.beat.consumer - 你应该将编译/测试与部署拆分成两个独立的阶段,这样你就可以将相同的代码部署到测试、质量保证和生产环境中。 - Erik Funkenbusch
谢谢。 "发布"功能正在部署您提到的软件包。我遇到的问题是将测试执行与构建步骤分开,因为我找到的XUnit示例都是对构建的自定义。我后来发现了xunit.runner.visualstudio NuGet包,它允许我适当地自定义测试步骤。但是,现在需要进行两次构建-第一次构建准备测试,第二次构建如果测试通过则创建部署包。 - one.beat.consumer
3个回答

15
我们使用"Visual Studio Build" 步骤,并将以下行作为 MSBuild 的参数:
/p:DeployOnBuild=True /p:PublishProfile=$(DeploymentConfiguration)

变量选项卡页必须配置DeploymentConfiguration。它必须是发布配置文件(pubxml文件的文件名)的名称。如果文件名为Build.pubxml,则发布配置文件为Build。

例如:

/p:DeployOnBuild=True /p:PublishProfile=Build

3
@Sabastian - 谢谢。那么我的问题是如果接下来的Visual Studio测试构建步骤失败,如何防止此部署? - one.beat.consumer

8

我想补充说,Ben Day的精彩写作帮助我们快速打包,并通过发布管理器发布到多个环境中。

他的msbuild参数如下:

/p:DeployOnBuild=True /p:DeployDefaultTarget=WebPublish /p:WebPublishMethod=FileSystem /p:DeleteExistingFiles=True /p:publishUrl=$(build.artifactstagingdirectory)\for-deploy\website

与被接受的答案不同之处在于,此参数集将所有内容分阶段保存到一个工件文件夹中,并将其作为构建的一部分保存。然后,我们可以重复部署完全相同的代码。
我们在 for-deploy 文件夹旁边捕获 web.env.config 文件,然后在发布过程中使用 xdt 转换来确保针对要部署到的任何环境进行更新。 它适用于我们所有的 Web 项目。

1
发布目录可以在发布配置文件中设置,不需要在命令行上指定。因此,它可以更轻松地进行版本控制。 - Erik Funkenbusch
1
这是一个很好的观点。针对我们的环境(也许我们在这方面有些不同寻常?),我们选择了这种方法来覆盖任何发布配置文件,以捕获网站作为构建产物并通过 TFS Release Manager 部署到多个目标。 - Reacher Gilt

-5
我们使用WebDeploy/MSDeploy来管理40多个应用程序,并且非常喜欢它。我们在所有服务器上安装了WebDeploy,这样我们就可以更轻松地部署应用程序,但您也可以使用Web Deploy On Demand功能,该功能不需要预先安装WebDeploy。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接