【问题标题】:CI/CD with Docker - what is the final deployment step?CI/CD 与 Docker - 最后的部署步骤是什么?
【发布时间】:2017-05-25 07:40:42
【问题描述】:

我正在开发一个小型网站(Ruby/Sinatra),供我工作的内部使用。 (简单地说,它会处理一些源数据并生成报告。)

我想使用 Docker 部署它,并有一个适用于我的开发环境的设置,但我试图了解“生产”部署的工作流程(我们使用的是 Jenkins)。

我已经阅读了很多关于使用 Docker 部署工作流程的文章,但它们似乎都停留在“然后将您的映像推送到 Docker 注册表”上。似乎缺少的是如何获取该图像并实际更新应用程序。

我明白每个应用程序都可能不同,但下一步是什么?我知道可以使用许多不同的框架,例如 Chef、Puppet、Ansible,但我的问题是——如何将其集成到我的 CI/CD 管道中?例如。作业是否将更改“推送”到生产服务器,或者是否应该在生产服务器上运行 Jenkins 从站以直接在服务器上执行作业?

【问题讨论】:

    标签: docker jenkins continuous-deployment


    【解决方案1】:

    有多种编排工具,例如 docker-swarm、kubernetes 和 rancher。例如,在 docker swarm 中,您可以创建服务,并且可以仅针对一个实例以蓝绿部署方式更新版本(然后没有蓝绿 :)),如果您只使用 docker run 您应该检查正在运行的容器,停止如果它正在使用更新的映像版本启动您的 docker 容器,则将其删除。

    【讨论】:

      【解决方案2】:

      这取决于您的应用程序被配置为如何运行。就我而言,我在 systemd 脚本中调用了“docker run”。它被配置为一旦停止就重新启动。

      因此,在我的 Jenkinsfile 中,将图像推送到注册表后,我执行“docker pull”(我的 Jenkins 代理运行在应用程序所在的同一机器上),然后执行“docker stop” .这会导致应用程序退出,然后重新启动,这会导致它获取刚刚拉取的新版本,现在它正在运行新版本。

      【讨论】:

      • 谢谢大卫。不过,我能说清楚吗……当您说“我做 docker pull”时-这是手动步骤吗?或者那是詹金斯的工作?如果是后者,是什么触发了 Jenkins 的工作?它是您管道的一部分吗?
      • 哦,顺便说一句 - 我知道您可以使用重启策略配置 docker contains - 例如blog.codeship.com/…docker run 在 systemd 中可能不需要?
      猜你喜欢
      • 2020-04-03
      • 1970-01-01
      • 1970-01-01
      • 2021-07-31
      • 2019-11-25
      • 1970-01-01
      • 1970-01-01
      • 2016-08-03
      • 1970-01-01
      相关资源
      最近更新 更多