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