Jenkins-基于 SSH 实现 Jenkins 分布式
工作原理
-
主节点与从节点通信:
- 主节点通过 SSH 登录到从节点,并启动 Jenkins Agent 程序(
Agent.jar
) - Agent 程序通过主节点指定的端口(默认为 50000)与主节点保持通信
- 主节点通过 SSH 登录到从节点,并启动 Jenkins Agent 程序(
-
任务分发:
- 主节点根据任务配置和负载,将构建任务分发到从节点执行
- 从节点完成任务后,将结果返回给主节点
-
持续连接:
- SSH 会保持一个持久连接,确保主节点可以实时监控从节点的状态和任务进展
1. 机器准备
gitlab | 10.0.0.201 |
jenkins-master | 10.0.0.200 |
jenkins-slaves1 | 10.0.0.205 |
jenkins-slaves2 | 10.0.0.206 |
web | 10.0.0.202 |
2. gitlab 配置
主机配置dns解析
[root@gitlab ~]#apt update && apt install -y bind9 bind9-utils bind9-host bind9-dnsutils
[root@gitlab ~]#vim /etc/bind/named.conf.default-zones
......
zone "lly.org" IN {
type master;
file "/etc/bind/lly.org.zone";
};[root@gitlab ~]#vim /etc/bind/lly.org.zone
$TTL 1D
@ IN SOA master admin (
1 ; serial
1D ; refresh
1H ; retry
1W ; expire
3H ) ; minimum
NS master
master A 10.0.0.201
gitlab A 10.0.0.201[root@gitlab ~]#chgrp bind /etc/bind/lly.org.zone
[root@gitlab ~]#systemctl enable named
[root@gitlab ~]#systemctl restart named
工具添加 jenkins 主从节点公钥
3. jenkins-master 配置
dns 指向201主机
[root@jenkins ~]#vim /etc/netplan/01-netcfg.yaml
......
nameservers:
addresses: [10.0.0.201]
安装 jenkins 和 jdk
[root@jenkins ~]#apt update && apt -y install openjdk-17-jdk
[root@jenkins ~]#ls
jenkins_2.479.1_all.deb[root@jenkins ~]#dpkg -i jenkins_2.479.1_all.deb
[root@jenkins ~]#systemctl status jenkins.service
工具配置
安装插件
ssh 连接 gitlab 下载源码则需以下配置(Manage Jenkins-security)
添加凭据(用户名密码填写为从节点主机的用户名密码)
添加从节点配置
执行程序数量可以选择填写cpu个数
可定义多个标签,空格分隔
用法可选择”尽可能使用这个节点“或”只允许运行绑定到这台机器的job“
启动方式可选择“通过将代理连接到控制器来启动代理”或“通过ssh启动代理”
添加完成后,刷新节点列表,显示主从时间已同步即可
检查主从是否连接成功
[root@jenkins ~]#ss -nt
State Recv-Q Send-Q Local Address:Port Peer Address:Port Process
ESTAB 0 0 [::ffff:10.0.0.200]:57704 [::ffff:10.0.0.205]:22
ESTAB 0 0 [::ffff:10.0.0.200]:37734 [::ffff:10.0.0.206]:22
4. jenins-slaves 配置(两台从节点配置一致)
dns 指向201主机
[root@jenkins-slave1 ~]#vim /etc/netplan/01-netcfg.yaml
......
nameservers:
addresses: [10.0.0.201]
安装与主节点相同版本的 jdk
[root@jenkins-slave1 ~]#apt update && apt install -y openjdk-17-jdk
复制公钥到 web 主机上(如果需要 ssh key 连接的话)
[root@jenkins-slave1 ~]#ssh-copy-id 10.0.0.202
将主节点的脚本拷贝到从节点上
[root@jenkins ~]#scp -r /data/ 10.0.0.205:/
[root@jenkins ~]#scp -r /data/ 10.0.0.206:/
5. Jenkins 任务配置
勾选限制项目的运行节点,填写合适的标签