Jenkins-基于 SSH 实现 Jenkins 分布式

news/2024/11/30 4:55:35/

工作原理

  • 主节点与从节点通信

    • 主节点通过 SSH 登录到从节点,并启动 Jenkins Agent 程序(Agent.jar
    • Agent 程序通过主节点指定的端口(默认为 50000)与主节点保持通信
  • 任务分发

    • 主节点根据任务配置和负载,将构建任务分发到从节点执行
    • 从节点完成任务后,将结果返回给主节点
  • 持续连接

    • SSH 会保持一个持久连接,确保主节点可以实时监控从节点的状态和任务进展

1. 机器准备

gitlab10.0.0.201
jenkins-master10.0.0.200
jenkins-slaves110.0.0.205
jenkins-slaves2

10.0.0.206 

web10.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 任务配置

 勾选限制项目的运行节点,填写合适的标签


http://www.ppmy.cn/news/1551104.html

相关文章

GaussianDreamer: Fast Generation from Text to 3D Gaussians——点云论文阅读(11)

此内容是论文总结,重点看思路!! 文章概述 本文提出了一种快速从文本生成3D资产的新方法,通过结合3D高斯点表示、3D扩散模型和2D扩散模型的优势,实现了高效生成。该方法利用3D扩散模型生成初始几何,通过噪声…

spring +fastjson 的 rce

前言 众所周知&#xff0c;spring 下是不可以上传 jsp 的木马来 rce 的&#xff0c;一般都是控制加载 class 或者 jar 包来 rce 的&#xff0c;我们的 fastjson 的高版本正好可以完成这些&#xff0c;这里来简单分析一手 环境搭建 <dependency><groupId>org.spr…

laravel中队列使用

Laravel 提供了强大的队列系统&#xff0c;允许开发者将耗时任务推送到后台执行&#xff0c;从而提升系统性能和用户体验。本文将从基本使用到深入解析&#xff0c;结合单进程队列的特点&#xff0c;完整地介绍 Laravel 队列的使用。 队列的作用和场景* 在 Web 开发中&#x…

C#里怎么样使用LINQ的let关键字实现查询?

C#里怎么样使用LINQ的let关键字实现查询? 在C#中,let关键字是用来在查询表达式中声明一个范围变量的。范围变量是在迭代过程中保存查询产生的序列中的元素的临时变量。 以下是一个使用let关键字的示例代码: /** C# Program to Implement Let Condition using LINQ*/ usi…

ubuntu客户端使用飞牛云的smb服务端共享,和ftp记录

ubuntu smb客服端链接 在Ubuntu上设置SMB客户端连接到SMB服务器&#xff0c;你可以使用smbclient工具或者挂载共享目录。以下是使用smbclient和挂载的简单示例&#xff1a; 使用smbclient连接SMB服务器 安装smbclient&#xff1a; sudo apt-update sudo apt-get install smbcli…

Vue Promise的使用,界面使用异步线程循环执行方法(模拟线程)

目录 1.定义开始和退出标识 2.定义开始方法--异步 3.定义循环方法&#xff0c;以及控制规则 4.定义业务方法 1.定义开始和退出标识 为的是能控制开始和结束&#xff0c;记得销毁时要结束循环&#xff0c;否则方法会一直被执行 data() {return {isrunning: false, // 轮询…

第四十二篇 EfficientNet:重新思考卷积神经网络的模型缩放

文章目录 摘要1、简介2、相关工作3、复合模型缩放3.1、 问题公式化3.2、扩展维度3.3、复合比例 4、EfficientNet架构5、实验5.1、扩展MobileNets和ResNets5.2、EfficientNet的ImageNet结果5.3、EfficientNet的迁移学习结果 6、讨论7、结论 摘要 卷积神经网络(ConvNets)通常在固…

element-ui 中el-calendar 日历插件获取显示的第一天和最后一天【原创】

需要获取el-calendar 日历组件上的第1天和最后一天。可以通过document.querySelector()方法进行获取dom元素中的值&#xff0c;这样避免计算问题。 获取的过程中主要有两个难点&#xff0c;第1个是处理上1月和下1月的数据&#xff0c;第2个是跨年的数据。 直接贴代码&#xff…