新版本部署到容器

我正在AWS上运行CoreOS集群。 在AWS中的每个实例上运行一个docker容器。 例如,我有两个实例命名的API,运行我们最新的软件版本的docker图像。

我也有6个进程的实例运行另一个docker图像与最新版本。

我想更新集群中的每个容器,所以今天我使用GoCD来激活一个完成所有工作的“剧本”。 pipe道监听github项目,一旦我推送到该分支的变化,它激活pipe道。

它构build了API和处理器新的Docker镜像,它将新的更新后的镜像上传到dockerhub,然后连接到AWS实例,并为刚刚上传的镜像发出一个docker pull,最后它将启动带有新拉图像的容器。

这是我目前控制版本部署的方式。

问题是:

  1. 这需要很长时间
  2. 它有时因各种原因失败
  3. 这不是灵活的(我需要硬编码特定的分支来听取在github上,并从中拉文件)

你有任何其他的build议\工具来完成这项工作吗? 有时我需要更新3台机器,有时需要7台,我需要一些扩展。

我没有在我的环境中使用git,但已经使用了提交后的SVN钩子启动Jenkins部署工作stream程。 添加Jenkins Build Pipeline插件,这样你就可以从故障中恢复,而不是从头开始重新启动。 也就是说,检查GoCD是否支持这种事情,如果不需要的话,切换工具是没有意义的。

我会build议以下更改:

  1. 在您的部署工具中将可靠的手册分成几个独立的步骤。 这样可以让您重新开始接近故障,浪费更less的时间。

  2. 在pipe道中设置通知以通知您失败,并在最后通知您成功。 没有必要照顾一个进度条…很快变得沮丧

  3. 开始量化你的过程中的瓶颈。 你一步一步地修复一个缓慢的过程,找出最容易解决的问题。

从问题#3开始,您可能需要考虑是否要从各个分支发布代码。 GoCD是一个持续交付工具,最适合于基于主干的开发,即永远从主开发。

尽pipe如此,你不想直接部署到生产环境。 您可以在Go中手动批准步骤,也可以使用其他组件(即生产中运行的其他组件)执行一组自动化testing,或者同时进行testing和手动批准。

关于问题#2,您可能需要在GoCD中采取更多步骤,以便您可以遵循Go Web UI中的stream程,获取有关失败的电子邮件通知,并从失败的地方恢复。

关于#1,你必须告诉我们什么是缓慢的,对你的期望有什么样的期望。 GoCD在开始使用时并不是很快。 我认为它每分钟轮询GIT回购一次,空闲代理在一定的时间间隔检查服务器,看是否有工作要做。 尽pipe这基本上是一个固定的延迟。 它不会因为你有100个主机升级而变慢,除非你为每个实例做一个GoCD作业(这可能不是一个好主意)。

这听起来像泊坞窗撰写和docker群可能是你使用Ansible工作的更好的工具。