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

时间:2016-04-20 16:55:31

标签: deployment continuous-integration agile continuous-deployment

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

我主要担心的是:

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

编辑:

假设我的应用程序是一个餐馆应用程序,我把它卖给多家餐馆,每个都有自己的后端,应用程序商店帐户。只是颜色,标志是不同的。代码是一样的。

2 个答案:

答案 0 :(得分:1)

根据您的偏好,经验,实际开发过程,应用程序结构等,有几种可能的方法,每种方法都有利弊。

  1. 在单个VCS存储库中使用多个分支。
  2. 共享代码将进入master分支。每个客户特定的工件和自定义(可能还包括代码增量)都将从customN分支中移出master分支。该修补程序最初可以提交到其中一个customN分支中(例如,为了让客户在修复之前验证修复或多次迭代,然后再将其传播到所有客户)。如果是这样,则必须将修复程序双重提交到master分支。或者它可以直接进入master分支。从那里,修复将通过同步传播到所有其他customN分支,其中大多数应该是微不足道的。然后在包含相应customN repo分支的工作空间中重新构建相应的客户包。

    1. 构建客户包将在包含2个存储库的工作区中完成:
      • 包含共享代码的shared存储库
      • 包含客户特定工件的customN存储库
    2. 修复只会在共享代码仓库中提交一次,将更新分发给客户只是意味着拉动相应的客户工作区(自动获取更新的shared仓库)并构建包。 / p>

      可能可以在工作空间中对shared repo进行符号链接,而不是实例化它的副本,这可能会加快包构建速度。

      如果您还需要每个客户的代码增量,这种方法也无法正常工作。

      1. 使用"嵌套存储库"方法,如果您的VCS系统支持它。对于git,请参阅Nested git repositories?。我实际上没有使用这种方法,恕我直言,这是不必要的复杂。

答案 1 :(得分:1)

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

以下是一些建议:

组合您的应用程序

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

这样可以更容易进行更新,因为您只需要释放受bug影响的组件。

构建自动更新机制

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

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

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

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

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