使用 Docker 容器对 Jenkins 构建环境进行模板化

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

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

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


构建通常要求凭据或工具可用于运行它的从属节点。对于很少有专门作业的小型安装,这可能可以使用通用从属来管理,但是当这些要求乘以许多组织每天运行的数千个作业时,管理和标准化这些从属环境变得更具挑战性。

什么是码头工人?

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

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

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

用于引导和模板化从站的 Docker

Docker 已将自己确立为引导隔离和可重现环境的一种流行且便捷的方式,这使 Docker 容器成为最易于维护的从属环境。 Docker 容器的工具和其他配置可以在称为 Dockerfile 的环境定义中进行版本控制,并且 Dockerfiles 允许使用此定义快速创建多个相同的容器,或者使用 Dockerfile 的图像作为基础来创建更多自定义分支.

CloudBees Custom Builds Environment Plugin 允许 Docker 镜像和文件作为 Jenkins 从站的模板,将从站安装的管理开销减少到只更新可能数千个从站的少数环境定义中的几行。

使用 Docker 容器构建

该插件在作业的构建环境配置中添加了“在 Docker 容器内构建”选项。要启用它,只需滚动到任何 Jenkins 作业的“Build Environment”部分,然后选择“Build inside a Docker container”选项。然后,您将能够指定是否应从签入工作区的 Dockerfile 创建从属容器(例如,该文件位于项目的根目录中),或者是否从 Docker 注册表中提取显式映像以用作从属容器.











定制从站环境

对于通用构建,您可以利用 Docker Hub 中最流行的 Jenkins slave 映像,称为 evarga/jenkins-slave ,或者为需要一些构建依赖项的任何专用构建创建一个带有自定义 Dockerfile 的新映像,这些依赖项应该在工作区中可用,例如凭证。

要创建自定义环境,您需要创建自己的 Docker 从映像。这可以通过创建新的 Dockerfile 或运行现有的从映像(例如“evarga/jenkins-slave”),然后安装必要的自定义工具或凭据并将更改提交到新映像来完成。

要从 Dockerfile 创建新图像,您可以使用 Dockerfile 指南 参考 简单地编辑以下“evarga/Jenkins-slave”文件副本:

来自 ubuntu:trusty MAINTAINER Ervin Varga <ervin.varga@gmail.com> 运行 apt-get update 运行 apt-get -y 升级|session optional pam_loginuid.so|g' /etc/pam.d/sshd RUN mkdir -p /var/run/sshd RUN apt-get install -y openjdk-7-jdk RUN adduser --quiet jenkins RUN echo "jenkins:詹金斯” | chpasswd EXPOSE 22 CMD ["/usr/sbin/sshd", "-D"]

在 Docker 容器中构建的构建可以通过作业构建历史中内联显示的 Docker 图标来识别。






我从哪说起呢?

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