3

目前,我们在整个公司的 Intranet 中拥有一长串各种网站。大多数都在防火墙内,需要 Active Directory 帐户才能访问。最近,我们的一个问题是网站数量的增加以及添加了一个通用代码库来存储我们的数据库访问类、通用帮助函数、序列化方法等。我们的目标是跨平台使用该框架整个公司的所有网站。

目前,我们已根据这些更改一致地升级了内部数据输入应用程序。它是最新的。然而,问题在于维护所有其他网站。是否有最佳实践或方法可以让我在每个网站上找到版本并进行相应升级?我可以有一个集中的地方来保存这些 DLL 和站点引用它们吗?找出这些网站上的版本而不必浏览每个网站、找出版本并在每次更改后升级的最佳方法是什么?

请记住,我们运行最新的 TFS,并且是一个 .NET 开发团队。

4

2 回答 2

2

在我的工作中,我们有一个与你类似的设置,许多使用公共库的内部应用程序,我花了一年中最好的时间来整理这些。

首先要注意的是,您提到的任何内容都与 TFS 没有任何关系,但实际上是您的应用程序及其组件的打包和部署方式的症状。

以下是一些帮助您入门的想法:

设置自动/连续构建

这是您需要做的第一件事。如果必须,请使用 TFS 中的构建工具,或者投资于 TeamCity 之类的东西(这很棒)。评估一切。找到你喜欢并且其他人都可以忍受的东西。你之所以需要找到你喜欢的东西,是因为你最终会对它负责。

设置自动构建之所以如此重要,是因为这是您解决其余问题的起点。

设置自动部署

现在,您的构建服务器应该正在构建每个可部署的工件。不再需要手动部署。不再从工作站进行部署。没有更多的视觉工作室发布功能。很难摆脱这一点,但这是值得的。

如果您有很多 Web 项目,那么可以考虑使用 Web 部署,它可以使用 msbuild/powershell 轻松自动化,或者尝试使用 octopus deploy 之类的东西。

使用nuget打包常用组件

到目前为止,您的公共代码应该有自己的自动构建,但是您如何自动部署公共组件?将其打包到 nuget 中,然后将其放在共享中以供使用或将其托管在 nuget 服务器中(TeamCity 内置了一个)。一个好的构建服务器可以自动为你更新你的 nuget 包(如果你总是需要使用最新版本),你可以通过检查你的packages.config.


我知道这需要考虑很多,但它本质上是实现持续交付的基础 (http://continuousdelivery.com/)。

请注意,要做到这一点需要很长时间,但这个过程是渐进的,你可以随着时间的推移而发展。然而,你等待的时间越长,它就越难。不要觉得你需要同时升级所有项目,你不需要。只是造成最痛苦的那些。

我希望这有帮助。

于 2012-09-14T02:28:54.613 回答
0

我只想跳出针对您的问题的特定解决方案的空间,并解决您必须巩固工作量的潜在愿望。请注意,任何修补/升级方案都会产生您必须解决的成本 - 没有灵丹妙药。特别是,您想要实现的目标通常会产生构建/部署开销(如 jonnii 所述)或运行时开销(验证新版本以确保一切按预期工作)。

在你的情况下,因为你已经构建了你的产品,我希望你会走构建/部署路线。

请记住,即使使用二进制等价(一切都可以编译,并且单元测试通过),升级后应用程序的行为仍然存在某种不同的风险,因此您将无法避免至少在您的所有程序中进行一些基本测试应用程序(GAC 方法特别容易受到这种风险的影响)。

可能会发现更容易接受这一点,仅仅因为您构建了一个新版本的二进制文件,并不意味着它应该推广到所有 Web 应用程序,即使是那些已经正常运行的应用程序(如果没有损坏的话。 ..)。

If that is acceptable, then you will reduce your workload by only incurring resource expense on testing applications that actually need to be touched.

于 2012-09-17T02:57:41.327 回答