持续集成 – 使用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工作流程的方法.这是我最初的想法:

>在docker hub(bitbucket)上创建自动构建
>推送更改后,触发docker hub上的构建
>将在docker hub上进行测试(npm测试)
>一旦构建成功,在docker hub上创建一个webhook.
> webhook将指向我自己的应用程序,然后将更改推送到群组

问题:

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

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

Is it okay to run your testing on docker hub or should I rely on
another service?

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

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

My main problem is pushing the changes to the docker swarm. Should I setup my docker-swarm on a remote machine and host the application there?

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

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

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

>从旧的运行容器中删除流量
>停止旧的运行容器
>拉最新的容器
>开始最新的容器
冲洗并重复所有运行的容器.

这是通过声明服务在docker swarm中完成的.然后更新可以作为任务观看的图像.有关此过程详细信息的更多信息,请参阅Apply rolling update to swarm以及如何在Amazon updating docker containers in ecs中执行此操作

点赞