jenkins slave分布式环境- docker agent

2022-12-26  本文已影响0人  heichong

Jenkins的Master-Slave分布式架构主要是为了解决Jenkins单点构建任务多、负载较高、性能不足的场景。

Master-Slave相当于Server和Agent的概念。Master提供web接口让用户来管理job和Slave,job可以运行在Master本机或者被分配到Slave上运行构建。

一个Master(Jenkins服务所在机器)可以关联多个Slave用来为不同的job或相同的job的不同配置来

实现Master-Slave分布式架构,重点就是管理配置Slave;Slave的配置方式有以下几种:

这里来详细说说如何配置Docker Agent模式

准备

说明 Description
10.3.23.191 Jenkins Master,需提前安装好Jenkins
10.3.23.207 Slave,需提前安装好Docker环境
Docker版本 20.10.9

配置Slave

由于Master要通过docker 远程协议进行通信,所以需要把slave上docker的远程协议打开。

登录Slave机器

# 查询docker服务文件
systemctl status docker|grep Loaded|grep -Po '(?<=Loaded: loaded \()[^;]*'
/usr/lib/systemd/system/docker.service

# 查找启动参数
cat $(systemctl status docker|grep Loaded|grep -Po '(?<=Loaded: loaded \()[^;]*')|grep dockerd

ExecStart=/usr/bin/dockerd -H fd:// --containerd=/run/containerd/containerd.sock

# 先备份docker.service
SERVICE_FILE=$(systemctl status docker|grep Loaded|grep -Po '(?<=Loaded: loaded \()[^;]*') \
  && sudo cp ${SERVICE_FILE} ${SERVICE_FILE}.bak

# 删除dockerd的 -H参数
SERVICE_FILE=$(systemctl status docker|grep Loaded|grep -Po '(?<=Loaded: loaded \()[^;]*') \
  && sudo sed -i -e 's/ -H fd:\/\/ / /g' ${SERVICE_FILE}

# 再次查看验证
cat $(systemctl status docker|grep Loaded|grep -Po '(?<=Loaded: loaded \()[^;]*')|grep dockerd
ExecStart=/usr/bin/dockerd --containerd=/run/containerd/containerd.sock

vi /etc/docker/daemon.json (如果文件不存在,直接创建)
在文件内增加以下配置

"hosts":[
    "fd://",
    "tcp://0.0.0.0:2375"
  ]

我的配置后内容如下:

{
"exec-opts": ["native.cgroupdriver=systemd"],
"hosts":[
  "fd://",
  "tcp://0.0.0.0:2375"
]
}

然后重启docker

systemctl daemon-reload &&   systemctl restart docker  &&    systemctl status docker

为验证结果是否正确,我们可以在另外一起机器上进行执行以下命令进行测试

# docker -H tcp://10.3.23.207:2375 version
Client: Docker Engine - Community
Version:           20.10.21
API version:       1.41
Go version:        go1.18.7
Git commit:        baeda1f
Built:             Tue Oct 25 18:04:24 2022
OS/Arch:           linux/amd64
Context:           default
Experimental:      true

Server: Docker Engine - Community
Engine:
Version:          20.10.9
API version:      1.41 (minimum version 1.12)
Go version:       go1.16.8
Git commit:       79ea9d3
Built:            Mon Oct  4 16:06:37 2021
OS/Arch:          linux/amd64
Experimental:     false
containerd:
Version:          1.6.9
GitCommit:        1c90a442489720eec95342e1789ee8a5e1b9536f
runc:
Version:          1.1.4
GitCommit:        v1.1.4-0-g5fd4c4d
docker-init:
Version:          0.19.0
GitCommit:        de40ad0

能正确显示Server的版本,说明Slave的Docker远程链接已打开

配置Master

登录Jenkins

  1. 安装Docker插件
    进入 系统管理-系统配置-插件管理-可选插件 ,搜索“云提供商”,找到Docker 插件,如下图

    image.png
    点击install without restart安装插件
  2. 配置节点
    进入 系统管理-系统配置-节点管理-可选插件

image.png image.png image.png Docker Agent Template image.png image.png

按以上步骤配置完即可。

测试

我们新建一个pipeline来测试这个docker agent是否可用

image.png

编写pipeline

pipeline {
    agent {
        label 'docker-slave'
    }

    stages {
        stage('Hello') {
            steps {
                echo 'Hello World'
                sh 'pwd'
                sh 'sleep 20'
                echo 'Finish'
            }
        }
    }
}

构建之前,建议先去slave上把jenkins/agent:latest镜像拉取下来

docker pull jenkins/agent:latest

开始构建后,先到slave上看看

[root@K8STest0001 ~]# docker ps | grep jenkins
7cc2da5531c2   jenkins/agent:latest    "/bin/sh"   2 seconds ago   Up 2 seconds     blissful_euclid

可用看到,slave上已经运行了 jenkins/agent

查看jenkins执行日志:


image.png

从日志上看,说明此次执行是在docker agent上执行的!

上一篇下一篇

猜你喜欢

热点阅读