【问题标题】:How do I keep compiled code libraries up-to-date across multiple web sites using version control?如何使用版本控制在多个网站上使编译的代码库保持最新?
【发布时间】:2012-09-06 18:43:09
【问题描述】:

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

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

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

【问题讨论】:

  • 如果您创建了一个 Windows 类库项目(和一个额外的安装项目),则将所有代码转移到共享的其中,然后您可以将其直接安装到每个 Web 服务器上的 GAC 中。这样,您可以确保在每台服务器上的所有网站上运行完全相同的代码。当您需要更新时,您可以更新共享代码库,然后在服务器上重新安装,一切都很好地同步。
  • 您现在如何部署/更新站点?手动?
  • 是的,我们手动更新,我们遇到了一些网站已经过时的问题。

标签: asp.net .net version-control tfs versioning


【解决方案1】:

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

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

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

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

如果这是可以接受的,那么您将通过仅在测试实际需要被触及的应用程序上产生资源费用来减少工作量。

【讨论】:

    【解决方案2】:

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

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

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

    设置自动/连续构建

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

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

    设置自动部署

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

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

    使用 nuget 打包常用组件

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


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

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

    我希望这会有所帮助。

    【讨论】:

    • 不幸的是,自动化构建正在进行中。我在做出这个决定时受到更高权力的摆布。幸运的是,我们正在朝着这种模式迈进。当我们到达那里时,Nuget 是一个可靠的建议。谢谢。
    猜你喜欢
    • 2013-08-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-03-01
    • 2016-10-19
    • 1970-01-01
    • 2011-12-28
    • 2011-05-26
    相关资源
    最近更新 更多