Jenkins通过Squid代理服务器添加局域网节点机器

news2024/11/19 17:30:39

✨前言:

当jenkins在公网上的时候,如果要添加局域网内的服务器为节点机器构建的时候,这里就需要通过squid代理服务来实现了。当然你也可以使用其他的方式例如Apache等等,这里主要介绍通过Squid的方式。

🌟什么是Squid?

Squid是一种广泛使用的缓存代理服务器,它主要用于缓存和转发HTTP、HTTPS、FTP等常见的网络协议数据。Squid能够帮助减少带宽消耗、提高内容加载速度,并提供安全的网络访问控制。

🌟以下是Squid的一些主要特点和功能:

缓存和重用:
Squid可以缓存从因特网下载的资源,如网页、图片和其他文件。当相同的资源再次被请求时,Squid可以从其缓存提供这些内容,从而加快了数据传输速度并减少了实际的因特网带宽使用。
提高响应速度:
对于经常请求的数据,Squid由于其缓存功能可以快速响应,从而为用户提供更快的访问体验。
高可用性和负载均衡:
Squid可以配置为高可用性集群,从而帮助分散负载,并在出现问题时提供故障转移功能。
安全控制:
Squid可以通过配置访问控制列表(ACLs)限制用户访问某些网站。这对于企业和学校等机构管理网络安全特别有用。
透明代理:
Squid也可以配置成透明代理的方式运行,这种方式下,用户的网络请求会自动经过Squid代理而无需进行任何特殊配置。
内容过滤:
可以通过配合其他工具如SquidGuard来实现内容过滤,从而屏蔽不适当的或不需要的内容。
身份验证:
Squid支持多种身份验证机制,如BASIC、DIGEST、NTLM等,允许对使用代理服务的用户进行身份验证。
因其强大的功能和灵活的配置选项,Squid在不同规模的网络环境中都得到了广泛的应用,成为了现代代理服务器解决方案的重要组成部分。

✨1.安装Squid

🌟1.1现在代理服务器上安装Squid,可以直接yum 安装

yum install squid

🌟1.2 配置 Squid:

找到 Squid 的配置文件,通常位于 /etc/squid/squid.conf

打开配置文件,并进行必要的设置。下面是一些基本的配置选项:

#http_port 指定 Squid 监听的端口
http_port 3128

#accessible_ports 定义 Squid 能够访问的端口范围,可以限制只转发到特定端口的请求
acl Safe_ports port 80          # http
acl Safe_ports port 443         # https
acl CONNECT method CONNECT

#设置一些基本的访问控制,允许所有请求(你可以根据需要增加限制)
http_access allow all

#如果你需要认证,可以引入 auth_param 设置,配置基于用户名和密码的认证
#auth_param basic program /usr/lib/squid/basic_ncsa_auth /etc/squid/passwords
#auth_param basic realm proxy
#acl authenticated proxy_auth REQUIRED
#http_access allow authenticated

🌟1.3 启动 Squid 服务:

保存你的配置,并重启 Squid 服务以应用新的配置:

sudo systemctl restart squid

🌟1.4 测试配置:

从你的 Jenkins 节点机器或任何客户机尝试通过配置好的 Squid 代理服务器进行访问,确保代理工作正常。
你可以在 Jenkins 节点机器上设置环境变量或在浏览器设置中指定代理,如下所示:

export http_proxy="http://代理服务器IP:3128"
export https_proxy="http://代理服务器IP:3128"

然后使用 source ~/.bashrc 来应用刚才设置的环境变量。

🌟1.5 日志文件:

Squid 自动生成日志文件,通常在 /var/log/squid/ 目录中。如果遇到问题,阅读 access.log 和 cache.log 可能会有所帮助。这里 后面遇到问题了可以查看access.log

✨2.配置jenkins 节点机器

🌟2.1 添加节点,路径如下图所示,这里选择启动方式要选择Launch agent by connecting it to the controller

在这里插入图片描述

🌟2.2 下载 Jenkins 代理 JAR 文件:

访问 Jenkins 主服务器的 Web 界面,在「节点」配置页面(Jenkins Dashboard > Manage Jenkins > Manage Nodes and Clouds 然后选择你的节点),点击「通过 Java Web Start 启动代理」链接或者通过代理服务器的命令行下载:(这里添加了节点机器的时候会让你下载,如果是linux 节点就我一般下载到root目录下)
在这里插入图片描述

在你的节点机器上执行这条命令,我的是linux 所以上面选择的是linux的。

curl -sO http://jenkins服务器ip:8080/jnlpJars/agent.jar

下载完成之后root目录下会有一个agent.jar文件
在这里插入图片描述

🌟2.3 运行 Jenkins 代理:

使用下载的 JAR 文件启动 Jenkins 代理。你可以在命令中指定代理设置,格式如下:

java -Dhttp.proxyHost=代理服务器IP -Dhttp.proxyPort=代理端口 -Dhttps.proxyHost=代理服务器IP -Dhttps.proxyPort=代理端口 -jar agent.jar -jnlpUrl http://Jenkins主服务器URL/computer/节点名/slave-agent.jnlp -workDir "/path/to/workdir" -secret SECRETTOKEN

# 上面的命令需要修改为你对应的值

🌟2.4 问题解决

        at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
        at java.base/java.lang.reflect.Method.invoke(Method.java:566)
        at java.base/java.net.HttpConnectSocketImpl.doTunneling(HttpConnectSocketImpl.java:179)
        ... 11 more
Caused by: java.io.IOException: Unable to tunnel through proxy. Proxy returns "HTTP/1.1 403 Forbidden"
        at java.base/sun.net.www.protocol.http.HttpURLConnection.doTunneling(HttpURLConnection.java:2177)
        ... 16 more

如果你运行了之后报403 的问题
报错信息 java.io.IOException: Unable to tunnel through proxy. Proxy returns “HTTP/1.1 403 Forbidden” 表明 Jenkins 节点机器在尝试通过代理服务器连接到 Jenkins 主服务器时,代理服务器返回了一个 HTTP 403 Forbidden 响应。这意味着代理服务器拒绝了这个连接请求。

这通常是由下面几个原因中的一个或多个导致的:

代理服务器的配置不允许来自 Jenkins 节点机器的连接。
认证问题:如果代理服务器需要认证,Jenkins 节点机器上的命令行需要提供有效的代理服务器认证信息。
Squid 代理服务器的 ACL(Access Control List)配置可能限制了对 Jenkins 主服务器的访问。

🌟2.4.1 首先我们看下代理服务器上的squid的日志,cd /var/log/squid/

在这里插入图片描述
我们可以看到:
Jenkins 代理成功下载了 agent.jar(第一行),返回状态 TCP_MISS/200 表明下载成功。
Jenkins 代理也成功访问了 Jenkins 主服务器的 /tcpSlaveAgentListener/ (第二行和第四行),同样返回状态 TCP_MISS/200 表明该 HTTP GET 请求成功。
然而,在尝试通过 CONNECT 方法访问 Jenkins 主服务器的端口 50000 时(第三行和第五行),该请求被 Squid 以状态码 TCP_DENIED/403 拒绝,说明代理服务器不允许此请求。
从这个日志可以确定问题所在:Squid 配置不允许 CONNECT 方法的请求到 Jenkins 的端口 50000,这是 Jenkins 代理用来与 Jenkins 主服务器建立双向通信的端口。

🌟2.4.2 确认 Squid 配置中的 ACLs (Access Control Lists):

修改 Squid 的配置文件(通常是 /etc/squid/squid.conf)以允许 CONNECT 方法到 50000 端口。例如,你可以通过添加或调整这些行来允许 ACLs:

acl SSL_ports port 50000 # 允许50000端口作为安全端口
acl Safe_ports port 50000 # 允许50000端口作为安全端口
acl CONNECT method CONNECT

http_access allow CONNECT SSL_ports
http_access allow Safe_ports

🌟2.4.3 检查顺序很重要:

确保 http_access allow 规则的顺序正确。在 Squid 中,与第一个匹配的规则相关联的操作将被执行。如果存在一个 deny 规则,并且它在 allow 规则之前,那么连接仍然会被拒绝。

🌟2.4.4 重启 Squid 服务:

在更改配置文件后,重启 Squid 服务来应用更改:

sudo systemctl restart squid

🌟2.4.5 重新运行2.3 步骤之后,提示connected就代表代理连接成功,并且jenkins上显示节点是已同步状态即可

在这里插入图片描述

✨3 配置自动启动服务

为了将 Jenkins 代理配置成一个服务,你可以使用 systemd 来创建一个服务文件,这样 Jenkins 代理就能在系统启动时自动运行。下面是创建此服务的基本步骤:
3.1 创建一个新的服务文件:
打开文本编辑器,创建一个新的服务文件,例如 jenkins-agent.service,并添加以下内容:

sudo vi /etc/systemd/system/jenkins-agent.service

🌟3.2 编辑服务文件:

在编辑器中,输入以下内容:

[Unit]
Description=Jenkins Agent Service
Wants=network-online.target
After=network-online.target

[Service]
User=root
Environment="JAVA_OPTS=-Dhttp.proxyHost=代理服务器IP -Dhttp.proxyPort=代理端口 -Dhttps.proxyHost=代理服务器IP  -Dhttps.proxyPort=代理端口 -Dhttp.proxyUser=root -Dhttp.proxyPassword='123456' -Dhttps.proxyUser=root -Dhttps.proxyPassword='123456'"
ExecStart=/usr/bin/java $JAVA_OPTS -jar /root/agent.jar -url http://jenkins服务器IP:8080/ -secret e599ddfbf117569f7cc26b5b72d59710589b972d68553399d819ff43cccc475a -name "192.168.114.88" -workDir /root/
Restart=always
RestartSec=10

[Install]
WantedBy=multi-user.target

⚠️请注意以下几点:
User=root 指定了以 root 用户运行该服务,这是因为 agent.jar 位于 /root/ 目录下通常只有 root 用户有访问权限。
Environment 这一行定义了一个 JAVA_OPTS 环境变量,其中包含所有 Java 系统属性。注意,密码是被包在引号内的,这对于含有特殊字符的密码来说非常重要。
ExecStart 定义了启动 Jenkins 代理的命令。$JAVA_OPTS 是在之前定义的环境变量,其中包括了代理服务器的配置。
Restart=always 和 RestartSec=10 表明服务在失败后总是会重启,并且每次重启之间会有 10 秒延迟。
注意上面的Environment要根据你实际的路径来填写哈

🌟3.3 启用和启动服务:

接下来,启用该服务并启动它:

sudo systemctl enable jenkins-agent.service
sudo systemctl start jenkins-agent.service

🌟3.4 检查服务状态:

为了确认服务已经启动并运行中,你可以检查它的状态:

sudo systemctl status jenkins-agent.service

在这里插入图片描述

完成以上步骤后,你的 Jenkins 代理将作为系统服务运行。在系统重启后,它也将自动启动。

✨小结:

以上就是jenkins通过Squid代理服务器来配置jenkins局域网节点的步骤,希望对大家有帮助。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1867188.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

通过颜色传感器控制机械臂抓物体

目录 1 绪论 2整体设计方案 2.1 系统的介绍 2.2 抓取模块 2.2.1 机械臂的定义 2.2.2 机械臂的分类 2.2.3 机械臂的选用 2.3 颜色识别模块 2.3.1 颜色传感器识别原理 2.3.2 TCS3200简介 2.4 整体控制方案 3 颜色识别抓取系统的硬件设计 3.1 单片机选型及参数 3.2 系…

第三十二篇——大数据2:大数据思维的四个层次

目录 一、背景介绍二、思路&方案三、过程1.思维导图2.文章中经典的句子理解3.学习之后对于投资市场的理解4.通过这篇文章结合我知道的东西我能想到什么? 四、总结五、升华 一、背景介绍 我们生活在这个时代,我们是否按照这个时代需要的思维方式去思…

SHELL/2024/6/26

1.统计家目录下.c文件的个数 #!/bin/bash count0 for filename in $(ls ~ *.c) do ((count)) done echo count$count 2.终端输入一个.sh文件,判断文件是否具有可执行权限/然后运行脚本,没有可执行权限,添加可执行权运行脚本 #!/bi…

windows USB设备驱动开发通用技术

通用串行总线 (USB) 设备通过配置、接口、备用设置和终结点来定义其功能和功能,下面提供这些概念的高级概述。 常见 USB 方案 获取用于通信的设备句柄 ,并使用检索到的句柄或对象发送数据传输。 USB 描述符检索 以获取有关设备配置的信息、接口、设置及…

C语言之进程学习

进程打开的文件列表:就是0 1 2 stdin stdout stderro等 类似于任务管理器是动态分ps是静态的 Zombie状态: 在Linux进程的状态中,僵尸进程是非常特殊的一种,它是已经结束了的进程,但是没有从进程表中删除。太多了会导…

Flutter笔记(一)- 安装和配置Flutter

一、下载Flutter 访问网址:https://docs.flutter.dev/get-started/install?hlzh-cn 根据电脑所使用的操作系统的平台进行选择。笔者电脑的操作系统为Windows,因此选择如图1-1的Windows图片: 图1-1 Flutter网站(一) …

【LangChain系列——案例分析】【基于SQL+CSV的案例分析】【持续更新中】

目录 前言一、LangChain介绍二、在SQL问答时如何更好的提示?2-1、安装2-2、SQLite 样例数据2-3、使用langchain与其进行交互2-4、查看模型提示语2-5、提供表定义和示例行2-6、将表信息插入到Prompt中去2-7、添加自然语言->SQL示例2-8、在向量数据库中查找最相关的…

springboot异常产生原因

DataIntegrityViolationException Cause: java.sql.SQLException: Field ‘id’ doesn’t have a default value org.springframework.dao.DataIntegrityViolationException: ### Error updating database. Cause: java.sql.SQLException: Field id doesnt have a default …

qt开发-15_QFile

QFile 类提供了读取和写入文件的接口。在嵌入式里如果需要读写文件,最简单的方法就是 用 Qfile。 QFile 是一个读写文本、二进制文件和资源的 I/O 设备。QFile 可以自己使用,也可以更方 便地与 QTextStream 或 QDataStream 一起使用。 文件名通常在构造函…

海云安参编《数字安全蓝皮书 》正式发布并入选《2024中国数字安全新质百强》荣膺“先行者”

近日,国内数字化产业第三方调研与咨询机构数世咨询正式发布了《2024中国数字安全新质百强》(以下简称百强报告)。海云安凭借在开发安全领域的技术创新力及市场影响力入选百强报告“新质百强先行者” 本次报告,数世咨询经过对国内8…

获取个人免费版Ubuntu Pro

首先上官网地址:Ubuntu Pro | Ubuntu 点击页面中的"Get Ubuntu Pro now" 将用途选为“Myself”,在此页面中Ubuntu说明了该版本只面向个人开发者,且最终只允许5台设备免费使用;因而部署设备的抉择就不得不慎重考虑了&am…

Java | Leetcode Java题解之第200题岛屿数量

题目&#xff1a; 题解&#xff1a; class Solution {void dfs(char[][] grid, int r, int c) {int nr grid.length;int nc grid[0].length;if (r < 0 || c < 0 || r > nr || c > nc || grid[r][c] 0) {return;}grid[r][c] 0;dfs(grid, r - 1, c);dfs(grid, r…

设计模式原则——接口隔离原则

设计模式原则 设计模式示例代码库地址&#xff1a; https://gitee.com/Jasonpupil/designPatterns 接口隔离原则 要求程序员尽量将臃肿庞大的接口拆分为更小的和更具体的接口&#xff0c;让接口中只包含客户感兴趣的方法接口隔离原则的目标是降低类或模块之间的耦合度&…

WIN版-苹果和平精英画质帧率优化教程

一、视频教程&#xff1a; 想要视频的联系博主 二、图文教程&#xff1a; 前置说明&#xff1a;不按教程&#xff0c;会导致修改不成功&#xff0c;或者设备里面内容丢失。请务必按教程操作&#xff01;&#xff01; 准备工作&#xff08;这部分是在要改的设备上操作&#x…

数据结构--栈(图文)

栈是一种基本的抽象数据类型&#xff0c;具有后进先出的特点。在栈这种数据结构中&#xff0c;元素只能在一端进行插入和删除操作&#xff0c;这一端被称为栈顶&#xff08;Top&#xff09;&#xff0c;而另一端则称为栈底&#xff08;Bottom&#xff09;。 栈的概念及特点 栈…

C语言单链表的算法之插入节点

一&#xff1a;访问各个节点中的数据 &#xff08;1&#xff09;访问链表中的各个节点的有效数据&#xff0c;这个访问必须注意不能使用p、p1、p2&#xff0c;而只能使用phead &#xff08;2&#xff09;只能用头指针不能用各个节点自己的指针。因为在实际当中我们保存链表的时…

怎么使用python进行整除取余求幂

怎么使用python进行整除取余求幂&#xff1f; 整除法是//&#xff0c;称为地板除&#xff0c;两个整数的除法仍然是整数。 10//33 3 求模运算是%&#xff0c;相当于mod&#xff0c;也就是计算除法的余数。 5%2 1 求幂运算使用两个连续的*&#xff0c;幂运算符比取反的优先级高…

操作系统面试篇一

很多读者抱怨计算操作系统的知识点比较繁杂&#xff0c;自己也没有多少耐心去看&#xff0c;但是面试的时候又经常会遇到。所以&#xff0c;我带着我整理好的操作系统的常见问题来啦&#xff01;这篇文章总结了一些我觉得比较重要的操作系统相关的问题比如 用户态和内核态、系统…

css3实现水纹进度条

其实有一个mask-image属性 挺有意思&#xff0c;在元素上面实现遮罩层的效果&#xff0c;不过这玩意有些兼容性问题 需要处理&#xff0c;所以单纯可以通过渐变色的方式来实现 同时加上动画效果 .jianbian {width: 100%;height: 16px;background-color: #eee;display: flex;bor…

【shell 学习一】shell执行方式以及变量(自定义变量、整数运算)定义

1.shell执行方式 测试脚本 vim file1 echo hello 2024 read -p 请输入 name echao hh,$name执行1 bash file1执行2 sh file1执行3 . file1执行4 source file11和2的方式&#xff0c;是子shell 3和4的方式&#xff0c;是本shell bash是进入新的命令 这时候退出edit是退出这个新…