我的应用程序有多个环境(全部在Amazon Elastic Beanstalk中运行),即Production,Worker和Debug。每个环境都有相应的git分支,在某些方面与master不同(比如,配置被更改,一些代码被删除)。
我使用eb deploy
从其分支部署新版本的应用程序。它使用git zip
来压缩当前的git分支,并将信息发送到亚马逊。然后它部署到运行实例。
然而,问题是部署需要一些时间(大约5分钟)。因此,在部署工人和生产之间,它有不同的代码。这很糟糕,因为我的更改可能会改变队列协议或类似的东西。
我想要的是能够在所有环境中上传信息并进行处理,但实际上不能替换代码,只需准备它。在我为所有环境发出命令后,发出命令,例如"完成部署"以便在所有环境中同时替换代码库。
有办法吗?
答案 0 :(得分:2)
您需要执行“蓝绿色”部署,而不是就地执行此操作。由于您的部署模型需要同步多个部分,因此对这些部分使用的协议进行更改意味着必须同时部署这些部分。如果有一个强烈绑定设计的频繁破坏协议,则将其视为单一服务。
“已部署”表示系统的最外层是由其他系统公开和使用的。在这种情况下,听起来你有一个Web服务器层向某个其他系统公开API,以及一个读取Web层产生的消息的工作层。
在更改中断队列协议时,您应该将BOTH更改集(Web服务器层和队列层)部署到完全新的beanstalk环境,将它们配置为彼此使用,然后在公开的端点上进行DNS交换,从旧的webserver EB环境到新的环境。在Web服务器层上交换DNS并验证环境是否按预期工作后,您可以销毁旧的Web服务器和队列层。
在非破坏协议的更新中,您只需更新一个或另一个环境。
这听起来很复杂,因为它确实如此。如果您经常破坏协议,那么您的系统就不会分离到足以期望对工作程序和Web服务器层进行版本化,这就是为什么您必须执行这个复杂的过程来一起对它们进行版本化。
希望这有帮助!