使用 Jenkins 触发 Docker 管道

一则或许对你有用的小广告

欢迎加入小哈的星球 ,你将获得:专属的项目实战 / Java 学习路线 / 一对一提问 / 学习打卡/ 赠书活动

目前,正在 星球 内带小伙伴们做第一个项目:全栈前后端分离博客项目,采用技术栈 Spring Boot + Mybatis Plus + Vue 3.x + Vite 4手把手,前端 + 后端全栈开发,从 0 到 1 讲解每个功能点开发步骤,1v1 答疑,陪伴式直到项目上线,目前已更新了 204 小节,累计 32w+ 字,讲解图:1416 张,还在持续爆肝中,后续还会上新更多项目,目标是将 Java 领域典型的项目都整上,如秒杀系统、在线商城、IM 即时通讯、权限管理等等,已有 870+ 小伙伴加入,欢迎点击围观








正如 我们的博客系列 到目前为止所展示的那样,Docker 容器在 CD 管道和组织架构中有多种用途。 Jenkins 可以将应用程序打包到 Docker 容器中,并通过构建管道跟踪它们进入生产环境。由于 Jenkins Workflow 和 Custom Build Environments 插件,构建本身可以在 Docker 容器中运行,从而保证构建执行的标准化、隔离和干净的环境。 Docker 主机池也可以使用 CloudBees Jenkins 平台在 Jenkins master 之间共享,创建所需的冗余以确保有足够的 slave 始终在线并可供 master 使用。结合起来,这些解决方案提供了一种为 Jenkins 和其他内部应用程序管理和创建 Docker 架构的好方法,但是当需要升级这些运行时以进行安全更新或新应用程序发布时会发生什么?使用 Docker,对基础映像的更改需要从新的基础映像重建生产中的所有容器。但在深入了解这意味着什么之前,让我们先回顾一下 Docker 什么。

什么是码头工人? Docker 是一个开源项目,它提供了一个使用容器构建和传输应用程序的平台。该平台使开发人员能够轻松创建标准化环境,确保测试环境与生产环境相同,并为虚拟化应用程序提供轻量级解决方案。

Docker 容器是由应用程序及其依赖项组成的轻量级运行时环境。这些容器在机器的“金属”上运行,从而避免了与传统虚拟化技术相关的 1-5% 的 CPU 开销和 5-10% 的内存开销。它们也可以从称为 Docker 映像的只读模板创建。

Docker 映像可以从称为 Dockerfile 的环境定义或已作为映像提交的正在运行的 Docker 容器创建。一旦 Docker 镜像存在,它就可以被推送到像 Docker Hub 这样的注册表,并且可以从该镜像创建一个容器,创建一个运行时环境,其中安装了一组有保证的工具和应用程序。同样,容器可以提交到镜像,然后再提交到 Docker Hub。

Docker Hub 是一个 Docker 镜像注册中心,由 Docker Inc. 提供,作为托管服务和用于本地安装的软件。 Docker Hub 允许共享和拉取图像以用作容器或作为其他 Docker 图像的依赖项。 Docker 容器也可以作为图像提交到 Docker Hub,以将它们保存在当前状态。 Docker Hub 之于 Docker 镜像就像 GitHub 之于许多开发人员的代码——版本和访问控制的重要工具。

当音乐渐行渐远...

无论出于何种原因,您的组织创建的精心制作的 Docker 镜像都不可避免地需要更新。虽然 Docker 很有趣而且很受欢迎,但它(还)没有神奇到消除这种常青树维护的程度。然而,这些升级并不需要很痛苦,只要在将它们推向生产之前经过测试和验证即可。

Jenkins 现在可以触发这些测试并使用 CloudBees Docker Hub 通知插件重新部署。该插件允许对 Docker Hub 中的图像进行任何更改以触发 Jenkins 中的构建,包括从属重建、应用程序打包、通过 Docker 图像发布应用程序以及通过 Docker 容器部署应用程序。

使用 Docker Hub 监控变化

该插件为标准 Jenkins 作业和 Jenkins 工作流添加了新的构建触发器。此触发器称为“监控 Docker Hub 的图像更改”,它允许 Jenkins 跟踪何时重建给定的 Docker 图像,无论该图像只是被作业引用还是在给定的存储库中。


一旦触发了作业,构建的日志将说明触发的内容(例如“通过推送到 <Docker Hub 存储库名称> 触发”)。

Docker Hub 挂钩链接

Docker Hub 本身支持 webhook 链,您可以在 Docker 的 webhook 文档 中阅读更多相关信息。如果您为不同的操作添加了多个 webhook,则每个服务正在执行的回调是在一个链中完成的。如果链中较高的一个挂钩失败,则不会运行任何后续 webhook。如果在基于推送的图像执行任何其他操作之前使用下游 Jenkins 作业作为 QA 检查,这将非常有用。

<jenkins-url>/jenkins/dockerhub-webhook/details 将列出所有钩子事件触发的所有事件,您将直接链接到构建,而 Docker Hub 的 webhook 将链接回 Jenkins 实例。您还可以将标签推送到 Docker Hub 存储库。

Docker 镜像拉取

此插件还添加了一个构建步骤,用于从 Docker Hub 中拉取图像。这是一个简单的构建步骤,它使用指定的 ID、凭据和注册表 URL 执行“docker pull”,允许将触发构建的 Docker 映像拉入工作区以进行测试。

我从哪说起呢?

  1. CloudBees Docker Hub Notification Plugin 是一个开源插件,因此可以从开源更新中心下载或打包为 CloudBees Jenkins 平台的一部分。
  2. 其他插件补充并增强了此插件可能的管道。在这些博客中详细了解他们的用例:
  3. Docker 构建和发布插件
  4. Docker Slaves 与 CloudBees Jenkins 平台
  5. Jenkins Docker 工作流 DSL
  6. Docker 可追溯性
  7. Docker 自定义构建环境插件
  8. 更多信息可以在新发布的 Jenkins Cookbook 中找到