【问题标题】:Deployment of new version to containers将新版本部署到容器
【发布时间】:2016-02-04 11:04:16
【问题描述】:

我在 AWS 上运行 CoreOS 集群。 在 AWS 中的每个实例上,我运行一个 docker 容器。 例如,我有 2 个名为 API 的实例,它们使用我们最新的软件版本运行 docker 映像。

我还有 6 个处理器实例运行另一个最新版本的 docker 映像。

我想更新集群中的每个容器,所以今天我使用 GoCD 和管道来激活一个可以完成所有工作的 ansible-playbook。 管道监听 github 项目,一旦我将更改推送到该分支,它就会激活管道。

它构建 API 和处理器新的 docker 镜像, 它将新更新的图像上传到 dockerhub, 然后它连接到 AWS 实例并为它刚刚上传的图像发出 docker pull, 最终,它使用新拉取的图像启动容器。

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

问题是:

  1. 需要很长时间
  2. 有时会因各种原因而失败
  3. 不灵活(我需要硬编码特定分支以在 github 上收听并从中提取文件)

您还有其他建议\工具来完成这项工作吗? 有时我需要更新 3 台机器,有时需要更新 7 台机器,而且我需要可扩展的东西。

【问题讨论】:

  • 你看过fabric (fabfile.org)吗?
  • 这有点像使用 ansible 只是不同的语法..

标签: git amazon-web-services docker ansible go-cd


【解决方案1】:

我没有在我的环境中使用 git,但使用了启动 Jenkins 部署工作流程的提交后 SVN 挂钩。添加 Jenkins Build Pipeline Plugin 这样您就可以从失败中恢复,而不是从头开始。也就是说,检查 GoCD 是否支持这种东西,如果不需要,切换工具是没有意义的。

我建议进行以下更改:

  1. 在部署工具中将 ansible playbook 分解为离散的步骤。这将允许您在更接近故障时重新启动,从而减少浪费的时间。

  2. 在您的管道中设置通知以通知您失败,并在最后一个通知您成功。没有必要照看进度条......这很快就会变得令人沮丧

  3. 开始量化流程中的瓶颈所在。你一步一步地修复一个缓慢的过程,首先确定最容易修复的事情。

【讨论】:

    【解决方案2】:

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

    您不想在每次推送到主干时直接部署到生产环境。您可以在 Go 中进行手动批准步骤,或者使用其他组件作为生产中运行的版本运行一组自动化测试,或者同时进行测试和手动批准。

    关于问题 #2,您可能希望在 GoCD 中有更多步骤,以便您可以按照 Go Web UI 中的流程、收到有关失败的电子邮件通知以及从失败点恢复等。

    关于#1,您必须告诉我们什么是慢,以及您对时间安排有什么样的期望。 GoCD 在入门方面并不快。我认为它每分钟轮询一次 GIT 存储库,空闲的代理会每隔一段时间检查服务器,看看是否有工作要做。不过,这基本上是一个固定的延迟。它不会因为您有 100 台主机要升级而变慢,除非您为每个实例创建一个 GoCD 作业(这可能不是一个好主意)。

    听起来 docker compose 和 docker swarm 可能是您使用 Ansible 工作的更好工具。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-02-05
      • 2022-06-22
      • 1970-01-01
      • 2018-12-26
      • 2013-02-08
      相关资源
      最近更新 更多