最佳实践:如何使用CI/CD将flask webapp部署到数字海洋



我正在自学如何使用Jenkins和Docker进行CI/CD和部署到数字海洋。我在某些步骤上停滞不前,我对CI/CD的最佳实践特别感兴趣。

我目前拥有的流程/管道:

  1. 带有Flask web应用程序和docker-compose.yml的本地代码(包括dockerfile(
  2. 将代码推送到github
  3. CI:Local jenkins(稍后将被转移到主机(测试代码
  4. 如果测试成功运行,我会登录到液滴,克隆repo,停止运行docker容器,执行docker-compose up
  5. 我的应用程序再次启用

我想自动化第4步,可能我有两个计划来做这件事(非常感谢关于最佳实践的建议!(。

计划1:
1。在Jenkins管道中编写一个步骤,该步骤将
4.1。自动启动新液滴
4.2使用ssh登录
4.3从github提取代码
4.4使用docker compose
4.5使用IP浮动重新路由到新液滴

计划2:
2。在Jenkins管道中编写一个步骤,该步骤将
4.1构建代码并以某种方式将图像推送到"某个地方">
4.2启动一个新的液滴
4.3使用ssh登录液滴
4.4从"某个位置"拉取图像
4.5从docker compose开始
4.6使用IP浮动重新路由到一个新液滴

我想听听你对以下步骤的看法:
1。哪个计划更好?2.我能做得更好吗
3.我可以使用哪些最佳实践
4.在哪里可以推送图像,以便将其拉入新的液滴?

编辑:

我想听听您对以下问题的回答:
1。哪个计划更好
2.为什么Kubernetes在生产环境中比docker compose更好?

我建议在生产环境中使用Kubernetes而不是docker compose。如果不是Kubernetes,并且你真的只想要Docker,那么至少让它成为Docker Swarm。。

  • docker compose对于生产来说是不可靠的,因为首先它只适用于单个节点。如果你想扩大规模,你肯定会有停机时间,因为你将依赖垂直规模(增加你的节点资源(
  • Kubernetes和Docker Swarm是编排工具。这意味着你可以添加更多的服务器来缩放应用程序,也就是水平缩放。这种编排允许将容器分配给其他液滴,即使它们位于不同的液滴中,它们也可以自由地与其他容器通信docker compose一个人做不到。我会向初学者推荐Docker Swarm,因为Kubernetes非常复杂

通常情况下,您应该只在云中设置基础设施,然后您的CI/CD将在Jenkins上进行连续集成,进行连续映像构建,至少然后自动部署到服务器。

  • 我在这里说的是..当你将你的代码合并到源代码库的一个特定分支(,例如master(中,比如Github或Bitbucket,然后会运行一个自动的Jenkins构建,然后执行你的CI/CD。。所以基本上每次master有更新时,它也会更新你在液滴内的图像,从而获得最新的源代码

在您使用Digital Ocean的情况下。。您可以在您的液滴上创建一个API,用于接受webhook以触发自动部署

  • 这是我在使用数字海洋时可以想到的方法。DIdigital Ocean非常便宜,但与尝试GCP和AWS不同,它是手动完成的。在GCP和AWS中,有更多的方法可以实现部署自动化,而不是创建自己的webhook API。关于您的最后一句话"如果我可以使用Jenkins克隆代码,并在新的液滴中运行容器,并使用IP浮动重新路由",但我认为这太多了,而且速度很慢。这一过程可能需要10分钟?我们使用Kubernetes进行部署自动化的时间可能只有30秒。我们的整个CI/CD只需要2分钟

关于你的第四个问题。。Dockerhub应该适合您的图像存储库

最新更新