【问题标题】:What is the best practice for Docker CD/CI workflow?Docker CD/CI 工作流程的最佳实践是什么?
【发布时间】:2017-05-09 14:20:34
【问题描述】:

我对 docker worlflow 还是很陌生,我想知道对于 docker CD/CI 工作流程的最佳实践是什么……现在发表的大多数文章似乎并没有真正谈论“部署”部分docker,只有注册。

我想做什么:

  1. 进行一些代码更改
  2. 推送到 Git
  3. Jenkins 单元测试/EE 测试
  4. Jenkins 构建 docker 镜像
  5. 在注册表中存储 docker 映像
  6. 在服务器上运行 docker 映像。

为了实现步骤 1-5,我有以下堆栈。

用户推送到 gitlab -> Gitlab webhook 通知 jenkins -> jenkins 构建项目 -> 将镜像存储在 gitlab docker 注册表中。

我正在使用 Rancher 进行 docker 镜像部署……我真的很喜欢 Rancher 的分布式。即我可以指定要运行的 docker 映像,而 Rancher 负责部署我的容器的服务器。

理想情况下,我希望第 6 步是“分布式”的(即我不想 ssh 进入服务器并运行 docker run {imagename})并让一些服务成为部署权限

目前有什么类似的东西可以让我实现这一目标吗?

【问题讨论】:

    标签: git jenkins docker continuous-integration continuous-deployment


    【解决方案1】:

    至于最后一步,以 Rancher 为例(很多其他的也提供类似的 REST API),你可以让 Jenkins 调用 Rancher API 进行服务升级,前提是你需要定义自己的堆栈到Rancher 自定义服务目录。

    我也在寻找轻量级解决方案,并乐于了解替代方案。

    【讨论】:

      【解决方案2】:

      有很多不同的方法可以实现这一目标。

      最简单的方法之一是使用配置管理工具编排新映像的部署。 Ansible 是一个不错的选择,但其他像 puppet 或 chef 也不错。这些工具将使您完全控制必须在何处部署的内容。如example 中所述,您可以轻松滚动更新而不会中断任何流量。

      另一种方法是依靠集群本身来自动部署服务。这种方法通常被称为编排。像 kubernetes 或最近带有一些魔法的 docker swarm 这样的工具是不错的选择。

      附带说明一下,后一种方法倾向于微服务架构,看起来更吸引人,但实际上实现起来更复杂。它对集群执行的服务的构建方式做了一些假设。然而,第一种方法适用于任何类型的软件。

      【讨论】:

      • 如果使用 kubernetes,流程会怎样?是否有任何类型的“调用”可以自动部署图像?
      • 我对 kubernetes 的了解不足以提供答案,但是,通过 docker,您可以使用内置的 scheduler 和定期调用 docker service update 的 cron 作业。您也可以从 CI 服务器调用 REST endpoint 服务/名称/更新。
      猜你喜欢
      • 2019-01-27
      • 2019-08-22
      • 2021-10-26
      • 1970-01-01
      • 2020-02-25
      • 2020-04-03
      • 2010-12-02
      • 2017-09-10
      • 1970-01-01
      相关资源
      最近更新 更多