如何管理多个客户端的应用程序更新?

How to manage app updates for multiple clients?

我有一个将出售给多个客户的应用程序。

我主要担心的是:

如果在我的应用程序中发现错误,并且我已经修复了我的一个客户的应用程序中的错误,我如何自动将相同的修复程序应用到所有客户端,比如说 1000 个客户端?

编辑:

假设我的应用程序是一个餐厅应用程序,我将其出售给多家餐厅,每个餐厅都有自己的后端应用程序商店帐户。只是颜色,标志不同。代码相同。

有几种可能的方法,每种方法各有利弊,具体取决于您的喜好、经验、实际开发过程、应用程序结构等。

  1. 在单个 VCS 存储库中使用多个分支。

共享代码将进入 master 分支。每个客户特定的工件和定制(可能还包括代码增量)将进入 customN 分支,从 master 分支中拉出。修复可以最初提交到这些 customN 分支之一(例如,为了让客户在将修复传播给所有客户之前验证修复或修复的多次迭代)。如果是这样,那么修复程序必须双重提交到 master 分支。或者它可以直接进入 master 分支。从那里修复将通过同步传播到所有其他 customN 分支,其中大部分应该是微不足道的。随后在包含相应 customN 回购分支的工作区中重建相应的客户包。

  1. 构建客户包将在包含 2 个存储库的工作区中完成:
    • 一个 shared 包含共享代码的存储库
    • 包含客户特定工件的 customN 存储库

修复只会提交一次,在共享代码库中,将更新分发给客户只意味着拉取相应的客户工作区(自动获取更新的 shared 库)并构建包.

可能可以在工作区内仅对 shared 存储库进行符号链接,而不是实例化它的副本,这可能会加快包构建速度。

如果您还需要每个客户的代码增量,则此方法不起作用(很好)。

  1. 如果您的 VCS 系统支持,请使用 "nested repository" 方法。 git 参见 Nested git repositories?。我实际上并没有使用这种方法,恕我直言,它不必要地复杂。

您描述了一个非常具有挑战性的要求。

这里有一些建议:

组件化您的应用程序

尝试将您的应用程序构建为组件。某些组件将为每个客户定制,但希望大多数组件都是通用的。

这将使更新变得更容易,因为您只需要发布受错误影响的组件。

构建自动更新机制

建立自动更新机制。将此构建到您的所有应用程序中,以便可以将更新推送到您的所有客户端。

您还可以找到现成可用的专有自动更新机制。

运行 应用程序所有版本的持续集成

一个主要的挑战是确保每个错误修复不会将其他错误引入应用程序的许多版本中。做到这一点的最好方法是拥有一套涵盖应用程序中最重要功能的自动化回归测试。配置持续集成,以便构建并测试应用程序的每个版本。

这应该让您有信心在所有客户的应用程序中推出更新。