Skip to content

本篇告诉你:

  1. 如何在 Jenkins 中添加一个远程 Docker 作为构建项目的 Cloud
  2. 如何在这个 Cloud 中指定代码仓库并打包 Docker 镜像
  3. 将镜像 push 到官方的 Docker Hub 仓库

实验前提:

两台服务器,一个跑Jenkins,另一台运行Docker服务端(注意需要开放远程访问)

目前Docker已经成为众多流水线中关键的组成部分之一。 容器化具有的简单性,灵活性以及隔离性可以让我们定制特定的而且能够精确重复的环境。容器化部署也越来越流行。

关于Docker的基本概念和使用方法,可以参见我写的系列

这里我需要两台主机(测试时可以是同一个机器),一台运行Jenkins,另一台运行Docker,作为Jenkins的代理节点。

当Jenkins启动pipeline工作时,同时连接并启动这个代理节点,由他完成构建镜像的工作,当流水线完成之后,Jenkins会停止并删除运行这些镜像的容器,使用这种方法需要配置Docker插件

好处:Jenkins master 节点只负责调控,具体的构建任务下放到Docker代理节点中去,解决master空间不够等问题

安装插件之后Jenkins的系统配置页面会多出一个Cloud部分。 需要填写连接Docker的配置信息 Name: 给Docker主机起个别名 Docker Host URI: 如 tcp://192.168.10.10:2375 ,连接本机Docker,如果连其他主机上的Docker服务端,需要Docker宿主机开放远程访问,具体见Docker 学习系列21 远程连接Docker

image.png

集成Docker插件后,在管理Jenkins页面中会多出一个Docker入口

image.png

点击后能看到配置过的分配给Jenkins实例的Docker服务器列表

image.png

再点进去能看到正在运行的容器和拥有的镜像

image.png

Cloud 构建Docker镜像并上传到指定仓库

接下来我们新建一个 freestyle 项目

  1. 配置代码仓库,注意仓库中要有Dockerfile,以我的这个公开仓库为例

  2. Build - Add build step 添加新的构建步骤 - Build / Publish Docker Image

  • Directory for Dockerfile: 因为Dockerfile就在代码中的根目录,这里不填
  • Cloud:选择刚刚配置的 Docker Cloud 名字
  • Image: 要打包上传的镜像名
  • Registry Credentials: 注意这里,要添加一个类型是username/password的可以登录docker仓库的credentials

image.png

  1. 构建,查看输出信息

image.png

  1. 检查 Docker Hub 可以看到刚刚上传的镜像

image.png

同时Docker Cloud中也多出了一个刚刚打包的镜像

image.png

参考

https://docs.docker.com/engine/reference/commandline/dockerd/#daemon-configuration-filehttps://www.jianshu.com/p/2ad009ae95adjenkins slave docker容器化