使用docker swarm进行持续集成工作流

时间:2016-05-03 08:27:26

标签: continuous-integration docker-compose continuous-deployment docker-machine docker-swarm

这是我的设置,此输出取自docker-machine ls。使用docker机器配置群。

NAME             ACTIVE      DRIVER         STATE     URL                          SWARM                     DOCKER    ERRORS
cluster-master   * (swarm)   digitalocean   Running   tcp://REDACTED:2376   cluster-master (master)   v1.11.1   
kv-store         -           digitalocean   Running   tcp://REDACTED:2376                              v1.11.1   
node-1           -           digitalocean   Running   tcp://REDACTED:2376   cluster-master            v1.11.1   
node-2           -           digitalocean   Running   tcp://REDACTED:2376   cluster-master            v1.11.1   

现在我正在寻找一种设置CI / CD工作流程的方法。这是我最初的想法:

  1. 在docker hub(bitbucket)上创建自动构建
  2. 推送更改后,在docker hub上触发构建
  3. 将在docker hub(npm test)上进行测试
  4. 一旦构建成功,就在docker hub上创建一个webhook。
  5. webhook将指向我自己的应用程序,然后将更改推送到群组
  6. 问题:

    • 是否可以在docker hub上运行测试,还是应该依赖其他服务?
    • 如果我依赖其他服务,您推荐的服务是什么?
    • 我的主要问题是将更改推送到docker swarm。我应该在远程计算机上设置docker-swarm并在那里托管应用程序吗?

1 个答案:

答案 0 :(得分:1)

这个过程的第一部分看起来都很好。变得复杂的是管理已部署的生产容器。

  

是否可以在docker hub上运行测试,或者我应该依赖它     另一项服务?

是的,假设您不需要进一步的集成测试,在docker hub上运行测试应该没问题。

我需要将我的容器与amazon服务集成,并且进行相当非标准的部署,因此这部分测试必须在亚马逊实例上完成。

  

我的主要问题是将更改推送到docker swarm。我应该在远程计算机上设置docker-swarm并在那里托管应用程序吗?

如果您只是使用一台机器,则不需要增加使用swarm的开销。如果您计划扩展到更大的多节点部署,那么部署到远程计算机是因为您将尽快发现使用swarm的问题。

您需要考虑如何淘汰旧版本并将最新版本的容器引入群体,这通常称为调度。

可以使用的一种简单方法是:

  1. 从旧的正在运行的容器中删除流量
  2. 停止旧的运行容器
  3. 拉最新容器
  4. 启动最新容器 冲洗并重复所有运行的容器。
  5. 这是通过声明服务在docker swarm中完成的。然后更新可以作为任务观看的图像。有关此流程详情的详细信息,请参阅Apply rolling update to swarm以及如何在亚马逊updating docker containers in ecs中执行此操作