我对配置管理和部署工具还不熟悉。我需要为一个我曾经参与过的最有趣的项目之一实现连续交付/连续部署工具。
首先,就个人而言,我对AWS
感到舒适,我知道Ansible
是什么,它背后的逻辑和目的。我对Docker
的理解不够深入,但我有这个想法。我查阅了很多互联网资源,但是我无法获得整体情况。
我的困扰是它们如何结合在一起。使用Ansible
,我可以管理基础设施作为代码;构建EC2
实例,安装软件包……我甚至可以通过拉取其代码、修改配置文件并启动Web服务器来部署完整的应用程序。Docker
本身是一个打包应用程序的工具,并确保它可以在任何部署之处运行。
我的问题是:
Docker(或Ansible和Docker)如何扩展持续集成流程呢?
假设我们有一个源代码仓库,团队成员完成一个功能的工作并推送他们的工作。Jenkins检测到此情况,运行所有的验收/单元/集成测试套件,如果全部通过,则将其声明为稳定版本。那么Docker在这里起什么作用呢?我的意思是,当团队推送他们的工作时,Jenkins是否必须拉取应用程序中编码的Docker文件源代码,构建应用程序的映像,并启动容器并针对它运行所有测试,还是以传统方式运行所有测试,如果一切正常,则从Docker 文件中构建Docker镜像并将其保存在私有位置中?Jenkins应该使用x.y.z标记最终的映像吗?
Docker容器配置:
假设我们有一个由Jenkins
构建的图像存储在某个地方,如何处理将相同的图像部署到不同的环境中,甚至包括不同的配置参数( Vhosts 配置、DB 主机、Queues URLs、S3 终端等)?最灵活的方法是什么,而不违反 Docker
原则?这些配置在构建图像时是否备份,或者基于它的容器启动时备份,如果是,它们是如何注入的?
Ansible 和 Docker:
Ansible
提供了一个 Docker
模块来管理 Docker
容器。假设我解决了上述提到的问题,当我想要部署我的应用程序的新版本 x.t.z 时,我告诉 Ansible
从存储位置拉取该图像,启动应用程序容器,那么如何注入配置设置!? Ansible 是否必须登录 Docker 图像,在其运行之前(听起来这很疯狂)并像传统主机一样使用其 Jinja2 模板?如果不是,这个问题是如何处理的?抱歉,如果问题很长,或者我拼写错了什么,但这是我大声思考的结果。我被卡了两个星期,我想不出正确的工作流程。我希望这可以成为未来读者的参考。
请分享您的经验和解决方案,因为这似乎是一个常见的工作流程。