使用 Jenkins 和 Ansible 部署容器化项目

使用 Jenkins 和 Ansible 部署容器化项目

我有一个使用多个 docker 容器运行的项目。现在我想使用 Jenkins(推送触发器)自动部署。我有三种方案,但我都不喜欢。以下是这三种不同的方案:

1)我在服务器上部署更改,然后在服务器上运行docker-compose build,以重新创建可能已更改的图像,然后运行容器。

缺点- 我没有在我的主机上构建这些新图像,而只是在服务器上构建,所以我不能确定构建是否会成功,如果没有先检查,它可能会有错误并导致几个错误。

2)我可以首先检查项目是否构建成功,但首先docker-compose build在我的 Jenkins 服务器上运行,然后再进行部署。

缺点- 我docker-compose build在我的 Jenkins 服务器和生产服务器上运行了两次。

3)我可以在我的 Jenkins 服务器上构建,然后将其推送到 docker hub 并拉取到服务器。所以我只构建一次。

缺点- 正如我所说,我有几张图片。因此在这种情况下,我必须在 docker hub 上上传大约 6 张图片,然后将它们拉到服务器上。

正如我所说,我不想使用其中任何一个,因为它们有缺点。那么也许还有其他更好的方法可以做到这一点?

答案1

通常,将构建和部署步骤拆分为单独的作业是一种很好的做法。这样,您只需构建/测试一次,就可以在准备就绪后将版本化映像迁移到您的环境中。您还可以在代码更改时触发构建,从而在需要时创建唯一的映像版本号。

您的部署作业应包含一个选项,用于指定要部署的 docker 镜像版本,这也有助于回滚。在我看来,选项 3 是最好的。

如果你不想使用 dockerhub,你可以轻松创建一个本地 docker 注册表,也可以将镜像推送到该注册表以保存镜像。请参阅docker_registry

相关内容