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

✨前言:

当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 CONNECThttp_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.mzph.cn/pingmian/36088.shtml

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

相关文章

DllImport进阶:参数配置与高级主题探究

深入讨论DllImport属性的作用和配置方法 在基础篇中,我们已经简单介绍了DllImport的一些属性。现在我们将深入探讨这些属性的实际应用。 1. EntryPoint EntryPoint属性用于指定要调用的非托管函数的名称。如果托管代码中的函数名与非托管代码中的函数名不同&#…

【数据结构 之压栈,形参和局部变量入栈之前会发生什么?】三种解释回答 包含操作系统版

有三种解释,前两种是针对程序代码而言的,基本类似,第三种结合了操作系统原理,大家各取所需。 解释一: 在计算机程序执行中,压栈、形参和局部变量的存储过程通常发生在函数调用的时候。在函数被调用时&…

计算机组成原理 | CPU子系统(3)MIPS32指令架构

MIPS32架构指令格式 MIPS32架构寻址方式 指令的编码与功能

文本生成sql模型(PipableAI/pip-sql-1.3b)

安装环境 pip3 install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu118 pip install transformers 代码 question "What are the email address, town and county of the customers who are of the least common gender?"sc…

02--Spring中AOP

目录 16.1 AspectJ框架【AOP框架】 16.2 使用AspectJ步骤 16.3 Spring中AOP概述 16.4 Spring中AOP相关术语 第十七章 AspectJ详解【重点】 17.1 AspectJ中切入点表达式 17.2 AspectJ中JoinPoint对象 17.3 AspectJ中通知 17.4 定义切面优先级 17.5 基于XML方式配置AOP …

203. 移除链表元素【链表】【C++】

题目描述 题目描述 给你一个链表的头节点 head 和一个整数 val ,请你删除链表中所有满足 Node.val val 的节点,并返回 新的头节点 。 示例 1: 输入:head [1,2,6,3,4,5,6], val 6 输出:[1,2,3,4,5] 示例 2&#x…

qiankun 结合 vue3, 小白快速上手体验

一、主应用改造 首先需要维护一份微应用列表,里面包含了微应用的名称、入口和生效规则,若需要给子应用传递内容,可以在 props 传入对应的内容 // app.js const apps [{name: micro-vue-app3,entry: //localhost:3013,container: #micro-vu…

再谈kettle两种循环之--调用http分页接口循环获取数据

再谈kettle两种循环之 – 调用http分页接口循环获取数据 1.场景介绍: 由于数据量比较大,接口有返回限制,需要用到循环分页获取数据 2.案例适用范围: 循环job可参考,变量运用可参考,调用http分页接口循环获取数据可参考&#…

SQLServer2022新特性 GENERATE_SERIES函数

SQLServer2022新特性 GENERATE_SERIES函数,在给定间隔内生成一系列数字。 序列值之间的间隔和步骤由用户定义。 参考官方地址 https://learn.microsoft.com/en-us/sql/t-sql/functions/generate-series-transact-sql?viewsql-server-ver16 1、本文内容 语法参数…

国产操作系统上多种压缩和解压命令详解 _ 统信 _ 麒麟 _ 中科方德

原文链接:国产操作系统上多种压缩和解压命令详解 | 统信 | 麒麟 | 中科方德 Hello,大家好啊!今天给大家带来一篇在国产操作系统上多种压缩和解压命令详解的文章。压缩和解压缩是我们在日常工作中经常需要进行的操作,尤其是在处理大…

【AIGC】用 AI 绘画 诠释印象派!关键词、安装包分享!

前言 印象派艺术运动是19世纪60年代法国的一场艺术革命,它不仅革新了绘画技法,更重新诠释了光与色彩、自然与美。印象派艺术家,如莫奈、雷诺阿和德加,通过捕捉自然光线的瞬息变化,用色彩和笔触表达对现实世界的独特感…

Theta方法:一种时间序列分解与预测的简化方法

Theta方法整合了两个基本概念:分解时间序列和利用基本预测技术来估计未来的价值。 每个数据科学爱好者都知道,时间序列是按一定时间间隔收集或记录的一系列数据点。例如,每日温度或经济指标的月值。把时间序列想象成不同成分的组合,趋势(数据…

【linux/shell】shell中使用for循环读取数据

目录 一.for循环从列表中读取数据的几种形式 二.for循环从配置文件读取数据 三.for循环用通配符读取目录 四.for循环带有数字变量 一.for循环从列表中读取数据的几种形式 #!/bin/bash listl"aa bb cc" list2aa bb ccfor i in $list3 doecho $i done 使用这种形…

取证工作:怎样解锁 LUKS2 加密磁盘?

对于 LUKS2 密码进行恢复,Elcomsoft Distributed Password Recovery (简称 EDPR) 软件可以构建高性能集群,以更快地破解密码。EDPR 软件提供零开销的可扩展性,并支持 GPU 加速,以加快恢复速度。EDPR 可帮助…

Redis-实战篇-编码解决商铺查询的缓存穿透问题(缓存空对象)

文章目录 1、缓存穿透2、常见的解决方案有两种:2.1、缓存空对象2.2、布隆过滤器 3、编码解决商铺查询的缓存穿透问题3.1、queryById3.2、RedisConstants.java 1、缓存穿透 缓存击穿是指客户端请求的数据在缓存中和数据库中都不存在,这样缓存永远不会生效…

Spring Boot中使用Feign进行HTTP请求

Spring Boot中使用Feign进行HTTP请求 大家好,我是免费搭建查券返利机器人省钱赚佣金就用微赚淘客系统3.0的小编,也是冬天不穿秋裤,天冷也要风度的程序猿!今天我们来探讨一下如何在Spring Boot中使用Feign进行HTTP请求。 一、Fei…

【b站-湖科大教书匠】3 数据链路层-计算机网络微课堂

课程地址:【计算机网络微课堂(有字幕无背景音乐版)】 https://www.bilibili.com/video/BV1c4411d7jb/?share_sourcecopy_web&vd_sourceb1cb921b73fe3808550eaf2224d1c155 3 数据链路层 3.1 数据链路层概述 3.1.1 数据链路层在网络体系结…

2024华为数通HCIP-datacom最新题库(变题更新⑤)

请注意,华为HCIP-Datacom考试831已变题 请注意,华为HCIP-Datacom考试831已变题 请注意,华为HCIP-Datacom考试831已变题 近期打算考HCIP的朋友注意了,如果你准备去考试,还是用的之前的题库,切记暂缓。 1、…

Python的with语句与上下文管理器:深入解析与实战应用

Python的with语句与上下文管理器:深入解析与实战应用 在Python编程中,with语句是一个强大的特性,它提供了一种简洁的方式来管理资源,如文件、网络连接等。通过使用with语句,我们可以确保在代码块执行完毕后&#xff0…

Python中的enumerate函数:索引与值的完美搭档

Python中的enumerate函数:索引与值的完美搭档 在Python编程中,遍历列表、元组或其他可迭代对象时,我们经常会需要同时访问每个元素的索引和值。这时,enumerate()函数就显得尤为重要,它为我们提供了一个简洁而高效的方…