我有一个应用程序,它有几个环境(都在Amazon Elastic Beanstalk中运行),即生产、工作和调试。每个环境都有相应的git分支,这些分支在某些方面与master不同(比如,修改了配置,删除了一些代码)。
我使用eb deploy
从其分支部署新版本的应用程序。它使用git zip
压缩当前git分支并将信息发送给Amazon。然后部署到正在运行的实例。
我想要的是能够上传信息并在所有环境中进行处理,但实际上不是替换代码,只是准备它。在我对所有的环境都这样做之后,发出像"finish deploy"这样的命令,以便在所有的环境中同时替换代码库。
有办法吗?
您需要执行"蓝绿色"部署,而不是就地执行。由于您的部署模型需要同步多个部分,因此对这些部分使用的协议的更改意味着这些部分必须同时部署。如果存在强绑定设计的频繁破坏协议,则将其视为单个服务。
"已部署"意味着系统的最外层是公开的,并且可以被其他系统使用。在这种情况下,听起来你有一个web服务器层向其他系统公开API,一个工作层读取web层产生的消息。
当进行中断队列协议更改时,应该将两个更改集(web服务器层和队列层)部署到全新的beanstalk环境中,将它们配置为相互使用,然后在暴露的端点上进行DNS交换,从旧的web服务器EB环境到新的web服务器EB环境。在webserver层交换DNS并验证环境正常工作后,可以销毁旧的webserver和queue层。
对于不违反协议的更新,您可以简单地更新一个或另一个环境。
听起来很复杂,因为它确实很复杂。如果你经常破坏协议,那么你的系统就没有足够的解耦,无法期望对worker层和webserver层进行版本化,这就是为什么你必须做这个复杂的过程来同时对它们进行版本化。
希望这对你有帮助!