Deployment 如何管理多个客户端的应用程序更新?
我有一个应用程序,将出售给多个客户 我主要关注的是: 如果在我的应用程序中发现一个bug,并且我已经修复了我的一个客户端应用程序中的bug,那么我如何能够自动将相同的修复应用于所有客户端,比如1000个客户端 编辑:Deployment 如何管理多个客户端的应用程序更新?,deployment,continuous-integration,agile,continuous-deployment,Deployment,Continuous Integration,Agile,Continuous Deployment,我有一个应用程序,将出售给多个客户 我主要关注的是: 如果在我的应用程序中发现一个bug,并且我已经修复了我的一个客户端应用程序中的bug,那么我如何能够自动将相同的修复应用于所有客户端,比如1000个客户端 编辑: 假设我的应用程序是一个餐馆应用程序,我把它卖给多个餐馆,每个餐馆都有自己的后端应用程序商店帐户。只是颜色、标识不同。代码是一样的。根据您的偏好、经验、实际开发过程、应用程序结构等,有几种可能的方法,每种方法都有利弊 在单个VCS存储库中使用多个分支 共享代码将进入主分支。每个特定于
假设我的应用程序是一个餐馆应用程序,我把它卖给多个餐馆,每个餐馆都有自己的后端应用程序商店帐户。只是颜色、标识不同。代码是一样的。根据您的偏好、经验、实际开发过程、应用程序结构等,有几种可能的方法,每种方法都有利弊
主
分支。每个特定于客户的工件和定制(可能也包括代码增量)都将进入从master
分支中拉出的customN
分支。修复程序最初可以提交到这些customN
分支之一(例如,为了让客户在将修复程序传播到所有客户之前验证修复程序或修复程序的多次迭代)。如果是这样,则必须将修复程序双重提交到主分支。或者,它可以直接进入master
分支。从那里,修复程序将通过sync传播到所有其他customN
分支,其中大多数分支应该很简单。然后在包含相应的customN
repo分支的工作区中重新构建相应的客户包
构建客户包将在包含2个存储库的工作区中完成:
- 包含共享代码的
共享
存储库
- 包含客户特定工件的
customN
存储库
修复只会提交一次,在共享代码repo中,将更新分发给客户只意味着拉动相应的客户工作区(自动获取更新的共享
repo)并构建包
可能只是在工作区内对共享的
repo进行符号链接,而不是实例化它的副本,这可能会加速包的构建
如果您还需要每客户代码增量,那么这种方法就不起作用(很好)
如果您的VCS系统支持,请使用“嵌套存储库”方法。有关git,请参见。我实际上并没有使用这种方法,因为它太复杂了
根据您的喜好、经验、实际开发过程、应用程序结构等,有几种可能的方法,每种方法都有利弊
在单个VCS存储库中使用多个分支
共享代码将进入主
分支。每个特定于客户的工件和定制(可能也包括代码增量)都将进入从master
分支中拉出的customN
分支。修复程序最初可以提交到这些customN
分支之一(例如,为了让客户在将修复程序传播到所有客户之前验证修复程序或修复程序的多次迭代)。如果是这样,则必须将修复程序双重提交到主分支。或者,它可以直接进入master
分支。从那里,修复程序将通过sync传播到所有其他customN
分支,其中大多数分支应该很简单。然后在包含相应的customN
repo分支的工作区中重新构建相应的客户包
构建客户包将在包含2个存储库的工作区中完成:
- 包含共享代码的
共享
存储库
- 包含客户特定工件的
customN
存储库
修复只会提交一次,在共享代码repo中,将更新分发给客户只意味着拉动相应的客户工作区(自动获取更新的共享
repo)并构建包
可能只是在工作区内对共享的
repo进行符号链接,而不是实例化它的副本,这可能会加速包的构建
如果您还需要每客户代码增量,那么这种方法就不起作用(很好)
如果您的VCS系统支持,请使用“嵌套存储库”方法。有关git,请参见。我实际上并没有使用这种方法,因为它太复杂了
您描述了一个非常具有挑战性的需求
以下是一些建议:
组件化应用程序
尝试将应用程序构建为组件。有些组件将为每个客户机定制,但希望大多数组件都是通用的
这将使更新更容易,因为您只需要释放受bug影响的组件
构建自动更新机制
建立一个自动更新机制。将其内置到所有应用程序中,以便将更新推送到所有客户端
您还可以找到现成的专有自动更新机制
为应用程序的所有版本运行持续集成
一个主要的挑战是确保每个bug修复不会在应用程序的多个版本中引入其他bug。实现这一点的最佳方法是拥有一套涵盖应用程序中最重要功能的自动化回归测试。配置持续集成,以便构建并测试应用程序的每个版本
这将使您有信心在所有客户的应用程序中推出更新。您描述了一个非常具有挑战性的需求
以下是一些建议:
组件化应用程序
尝试将应用程序构建为组件。一些化合物