jenkins通过Docker plugin部署slave

Jenkis分布式预热

Jenkins是Master-Slave架构,Master节点提供Web GUI 和API来管理、分配、运行构建任务;Slave节点只是用来运行Master节点分配的构建任务;因此Slave可以有效减轻Master的工作负载,这也意味着Slave节点可以分布在不同平台并且无需安装jenkins的完整包。

Master和Slave通信方式:

  1. Master->Slave,最常用的方式,在网络联通情况下,Master通过ssh主动与agent进行通信;
  2. Slave->Master,在Slave不可访问的情况下,通过Java Web Start(JNLP)由Slave访问Master;

Jenkins Master节点将基于以上两种方式,自动完成剩下的自动部署工作,如复制Slave所需的二进制文件以及启动/停止Slave等操作。

当然Jenkins还提供更灵活的部署方式,即基于ssh通过脚本来登录Slave节点。过程如下:

  1. 通过"http://yourserver:port/jnlpJars/agent.jar"下载Slave节点所需的最小运行包;
  2. 通过“java -jar agent.jar”启动Slave节点并配合脚本管理;

当Slave建立好后,只需在Master上根据"node label"将任务分配到指定的节点上运行。

动态创建Docker slave

通常情况下Slave在完成分配的构建任务后处于空闲状态,在后台一直运行而不会自动销毁释放资源。在docker项目中,我们借助Docker plugin实现动态创建Docker slave,执行完构建任务后自行销毁。

准备

组件功能
Docker pluginjenkins插件
jenkins/ssh-slave提供ssh协议的基础镜像,配合Docker plugin使用
10.10.2.33提供docker环境的宿主机,用于运行slave节点

正如文章开头部分"Jenkins分布式预热"中提到的,我们需要通过ssh协议使master和slave进行通信,因此使用 jenkins/ssh-slave提供ssh协议的基础镜像。而Docker plugin 会根据配置参数通过ssh协议创建一个jenkins slave的镜像,用来执行master分配的任务了。

Docker plugin具体处理流程如下:
在这里插入图片描述

具体实现

slave宿主机配置
#在宿主机上安装docker环境,在此不做介绍
#拉取提供ssh协议的基础镜像
docker pull jenkins/ssh-slave
#进入镜像生成ssh 秘钥
docker run -it jenkins/ssh-slave /bin/bash 
#生成秘钥
ssh-keygen
#开放22端口,提供访问docker plugin访问
root@4adf0e68a94b:/home/jenkins# cd /root/.ssh
root@4adf0e68a94b:~/.ssh# ls
id_rsa  id_rsa.pub
root@4adf0e68a94b:~/.ssh# cat id_rsa.pub 
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDCdxQWjtd3uskQDB+h1cJ+IHWuNi5xoAtWhrlIWOR37SgfbHyIFhOc+M1OxgBd+i/OWNPcQKsVTyijSMpTWjn6j0CAI4NG+k30TRZ3iocQ/1B0Ivemil3u2vxeXn0sP0hPjThQuNlOG/2tsCJxY82LskmxJ7xXA5lnmfqhvrWZW7Vn5WSbLinyEPxlkMkwOwlnjphtqQbCEYVqTs3CmFGF/TPLIZ9vTzyc6kDaeUmGXMTIbBdcb1kWQNvmdt+bnXiHMRmec5fMOwnxfgs+7MwwVbYpIhFdgJgkWhpUPrAmm6assLDTf8y0psOvXmn/UMvWrJkPTcJpD3259u+VlkK7 root@4adf0e68a94b
#启动镜像
#启动格式如下:
#docker run jenkins/ssh-slave "<public key>"
docker run -d -p 22:22 --name jenkins-slave jenkins/ssh-slave "ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDCdxQWjtd3uskQDB+h1cJ+IHWuNi5xoAtWhrlIWOR37SgfbHyIFhOc+M1OxgBd+i/OWNPcQKsVTyijSMpTWjn6j0CAI4NG+k30TRZ3iocQ/1B0Ivemil3u2vxeXn0sP0hPjThQuNlOG/2tsCJxY82LskmxJ7xXA5lnmfqhvrWZW7Vn5WSbLinyEPxlkMkwOwlnjphtqQbCEYVqTs3CmFGF/TPLIZ9vTzyc6kDaeUmGXMTIbBdcb1kWQNvmdt+bnXiHMRmec5fMOwnxfgs+7MwwVbYpIhFdgJgkWhpUPrAmm6assLDTf8y0psOvXmn/UMvWrJkPTcJpD3259u+VlkK7 root@4adf0e68a94b"
jenkins配置

1.安装Docker plugin插件

2.配置插件
“Manage Jenkins”-“Configure System”-“Cloud”
在这里插入图片描述
3.配置docker cloud
在这里插入图片描述”Docker Host URI" 是slave宿主机的tcp socket,master的docker plugin通过这个tcp连接对宿主的docker环境进行操作。

4.Docker Agent template配置
在这里插入图片描述Lables 是master绑定某个slave的标签;
Name 是新建容器的名称;
Docker Image是容器运行的镜像;
Volumes 是外部挂载,默认情况下都是使用容器内部提供的工具,我们需要根据实际情况使用挂载外部资源;
在这里插入图片描述/home/jenkins是jenkins slave的运行目录,我们通过Volumes已经挂载外部资源;
JavaPath是容器内自带的java,我们可以通过下面步骤进行修改为项目中使用的工具;
在这里插入图片描述Docker Agent tempaltes的环境变量用于定义ssh登录的秘钥;
Tool Locations 是根据Volumes挂载,修改为我们项目中使用的工具;

测试

新建mvn项目配置

1.通过lable expression绑定至对应Lable 标签的jenkins docker slave 节点。
在这里插入图片描述2.mvn 构建
在这里插入图片描述3.构建过程
在这里插入图片描述通过jenkins master/slave实现spring boot+docker的一个持续交付过程。

注意:由于spring boot 环境需要打包、构建、上传私有库,因此需要jenkins slave节点对宿主机的docker engine有操作权限,因此在docker 设置时通过"/var/run/docker.sock:/var/run/docker.sock"及容器属主的进行映射。
权限问题可参考:从socket权限问题重新认识docker架构

总结

虽然我们通过jenkins docker slave在一定程度上可以为master减负,在实际项目中可能出现slave的资源分配不均,是否支持负载均衡等问题,是我们在后续项目不断增多的情况下考虑提高交付效率可能需要考虑的。

参考:
Jenkins Distributed builds
Docker plugin

PS:如果你对博文感兴趣,请关注我的公众号“木讷大叔爱运维”,与你分享运维路上的点滴。

  • 0
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: Jenkins 可以通过在其中配置 Docker 插件来实现对 Docker 镜像的构建和部署。 首先,需要在 Jenkins 中安装 Docker 插件。然后,在 Jenkins 的全局设置中配置 Docker 环境变量,包括 Docker 的安装目录和访问权限。 接下来,在 Jenkins 中新建一个项目,在项目的构建触发器中选择“构建后操作”,并在其中配置 Docker 构建和部署的命令。 例如: - 构建镜像:`docker build -t myimage:latest .` - 推送镜像到镜像仓库:`docker push myimage:latest` - 在容器服务器上运行镜像:`docker run -d --name mycontainer -p 80:80 myimage:latest` 最后,保存并构建项目即可实现 Jenkins 通过 Docker 进行构建和部署。 ### 回答2: Jenkins是一个用于自动化构建、测试和部署软件项目的开源工具。而Docker是一个轻量级的容器化平台,可以将应用程序及其依赖项打包成一个独立的、可移植的容器。 要在Jenkins部署Docker,可以按照以下步骤进行操作: 1. 安装Docker:首先,在Jenkins服务器上安装Docker。可以根据服务器的操作系统选择适合的安装方法,并确保Docker服务已经成功启动。在Linux上,可以使用apt-get或yum命令进行安装;在Windows上,可以从Docker官网下载安装包。 2. 配置Docker凭据:在Jenkins中,需要配置Docker凭据以便连接和操作Docker。在Jenkins主页上,点击"凭据",然后点击"系统",在"全局凭据"下点击"添加凭据"。选择"Docker凭据提供程序",输入Docker仓库的用户名和密码,并保存凭据。 3. 安装Docker插件:在Jenkins主页上,点击"插件管理",然后点击"可选插件"。搜索并选择"Docker"插件,然后点击"安装无重新启动",等待插件安装完成。 4. 配置Jenkins节点:在Jenkins主页上,点击"系统管理",然后点击"节点管理器"。选择要部署Docker的节点,并点击"配置"。在"环境"中,勾选"在此节点上使用Docker",并选择之前配置的Docker凭据。保存配置。 5. 创建Docker容器代理:在Jenkins主页上,点击"新建任务",输入任务名称,然后选择"自由风格的软件项目"。在"配置"中,选择"Docker容器化代理",并配置Docker主机URI和Docker凭据。根据需要配置其他参数,并保存任务配置。 6. 构建和部署:在任务页面上,点击"立即构建",Jenkins将通过Docker在节点上创建容器,并运行所需的构建、测试和部署任务。可以通过Jenkins的控制台输出和构建历史来查看构建的结果和日志。 总结起来,要在Jenkins上利用Docker进行部署,需要安装Docker、配置Docker凭据、安装Docker插件、配置Jenkins节点,并通过创建Docker容器代理来构建和部署项目。这样可以实现更高效、可靠的软件构建和部署过程。 ### 回答3: Jenkins是一个开源项目,可以用于实现持续集成和持续交付。而Docker是一种轻量级的容器化技术,可以快速部署和管理应用程序。通过将JenkinsDocker结合使用,可以实现更加灵活和高效的部署流程。 要将Jenkins部署Docker中,以下是一些步骤: 1. 准备Docker环境:首先,需要在主机上安装和配置Docker。可以根据不同的操作系统,参考官方文档进行安装和配置。 2. 拉取Jenkins镜像:使用Docker命令行工具,从Docker Hub上拉取Jenkins的官方镜像。具体命令为: `docker pull jenkins/jenkins` 3. 创建Jenkins容器:运行以下命令,在Docker中创建一个新的Jenkins容器: `docker run -d -p 8080:8080 -p 50000:50000 --name jenkins_container jenkins/jenkins` 这个命令会在后台启动一个新的容器,并将主机的端口8080映射到容器的8080端口,用于访问Jenkins的Web界面。同时,还将主机的端口50000映射到容器的50000端口,用于Jenkins的agent连接。 4. 访问Jenkins界面:在浏览器中输入`http://localhost:8080`,即可打开Jenkins的Web界面。根据界面上的指引,完成Jenkins的初始化配置。 5. 安装插件与配置:登录Jenkins后台,在插件管理中安装所需的插件,例如Docker插件和Pipeline插件。然后,配置Jenkins的全局系统设置,将Docker的执行路径配置为Docker守护进程的路径。这样Jenkins就可以调用Docker命令来管理和运行Docker容器了。 6. 创建Jenkins任务:根据实际需求,在Jenkins中创建一个新的任务。在任务的配置中,可以使用Jenkins提供的Docker步骤或者插件,来构建、打包和部署Docker容器。 通过上述步骤,就可以将Jenkins成功部署Docker中,并使用Docker进行应用程序的持续集成和交付。这种基于容器的部署方式,具有便捷、快速、可复用的特点,能够加速开发流程,并提高应用程序的可靠性和可移植性。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值