使用Microsoft MSBuild发布目标构建管道?

3
我正在尝试创建一个“构建管道”。我想知道是否可以利用现有的 Microsoft 发布 msbuild 目标,还是需要从头开始编写自己的目标。
我有一个大型 Web 站点项目(而不是 Web 应用程序)。
构建管道如下所示:
1. 提交检查 2. CI 触发名为“01 提交阶段”的构建 3. “01 提交阶段”自动触发“02 准备部署” 4. “02 准备部署”自动触发“03 UAT”
以下是我在每个阶段希望发生的事情:
01 提交阶段
- 构建所有项目文件 - 运行单元测试 - 将网站通过 AspNet_Compiler 运行
02 准备部署
- 使用上一次构建的输出 - 然后将输出通过 AspNet_Merge.exe 运行,将编译的 dll 合并成一个单独的版本化程序集。 - 存储输出工件作为可部署项
03 UAT
- 将上一步骤的工件部署到 QA 进行测试。
我的问题是:
在第二个构建中,如何跳过构建目标,只需将现有的 Microsoft 发布流程指向现有的输出?还是我最好构建自己的一组 MSBuild 目标来完全满足我的需求?
到目前为止,我已经对构建自己的管道感到非常满意,但无法帮助自己感觉我正在错过一些 MS 的好东西。

你没有提到你使用的构建过程是什么。是TFS的默认构建模板吗?还是MSBuild脚本?你使用的是哪个版本的TFS? - KMoraz
我正在谈论标准的msbuild发布管道(Microsoft.WebSite.Publishing.targets)。TFS的版本并不重要。 - gregpakes
TFS的版本非常重要,因为除非必须这样做,否则您永远不会在MSBuild中构建发布管道。在2005/2008年,您别无选择,只能忍受MSBuild带来的痛苦。在2010/2012年,您可以使用Windows Workflow和开箱即用的LabDefaultBuild来部署到Hyper-V或标准环境。在2013年,微软添加了一个内置的发布管道,具有批准和验证步骤。 - MrHinsh - Martin Hinshelwood
我认为在问题中包括第三步已经造成了混乱 - 问题不涉及部署或发布。即使没有新的TFS 2013 Release Management,我的问题仍然存在。我的问题是:在第二步中,如何将现有的Microsoft MSBuild管道指向一些先前构建的构件,从而跳过“build”目标?原因是我希望“01提交阶段”的构建非常快,并提供单位测试的快速反馈。然后我想要另一个构建来做所有的打包等准备部署的工作,因为AspNetMerge需要10分钟。 - gregpakes
我再次建议您不要在MSBuild的一部分中执行此操作。 MSBuild仅用于一个目的...编译代码。多年来,它已经添加了其他附加功能,但这并不意味着它应该用于其他事情。我建议您切换到Windows Workflow以进行编排。哦...并且从Web Site移动到Web Application。大多数问题都将消失... - MrHinsh - Martin Hinshelwood
感谢您的回复,请忘记我在第3步中提到部署。我只是在谈论构建。第1步是编译代码,第2步有效地是AspNetMerging代码。这个问题与部署无关。我想知道是否可以将MSBuild管道指向一组预构建的工件,而不是在第二步中重新构建所有内容。我有效地将构建步骤分为两个部分。动机是在CI上获得快速反馈循环。另外将其转换为WebApp也不可行,构建需要5分钟在非常快的机器上。 - gregpakes
1个回答

1
如果您正在使用 TFS 2013,您可以使用内置的发布管理工具来定义环境、服务器和组件以进行部署。然后,您可以通过环境进行二进制升级的完整跟踪、批准和调度。

http://www.visualstudio.com/en-us/explore/release-management-vs.aspx

如果您正在使用TFS 2012,那么您可能需要更多的帮助,因为没有发布管理工具。但是,您可以使用基于工作流的构建系统与LabDefaultTemplate来部署和测试环境。如果您不想这样做,我建议您改用OctopusDeploy。

http://nakedalm.com/release-management-with-team-foundation-server-2012/

如果你使用的是TFS 2005/2008,那么你会遇到很多困难。唯一的支持方式就是使用MSBuild进行部署或者使用第三方工具。老实说,在这种情况下,鉴于产品的年龄,我建议升级到2012,然后再升级到2013。使用最新的工具...你仍然可以使用VS.old进行构建和创建,但你将获得新的协调和工具。

谢谢。在上面的评论中,我解释了为什么这并不完全回答我的问题,但这些都是非常有用的见解。当我开始使用发布管理时,TFS 2013部分肯定会很有用(我们目前使用2012)。我尝试过OctopusDeploy,但遗憾的是,NuGet打包需要超过40分钟才能完成我的网站。这使它成为不可行的选择。我已经几次在Twitter上联系过他们,但遗憾的是还没有得到回应。由于网站的规模,我认为我面临一些额外的问题,这使情况更加复杂化。 - gregpakes
你的网站有多大?如果有很多媒体,或许应该使用CDN? - MrHinsh - Martin Hinshelwood
这个网站非常大,但遗憾的是它部署到了许多站点。它通常只在内部使用,因此无法使用CDN。此外,大部分内容都是代码,因此CDN也没有帮助。就像我说的,我们不是你们平常见到的商店,只有一个生产站点等。 - gregpakes

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