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 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局域网节点的步骤,希望对大家有帮助。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

计算机视觉(CV)技术:优势、挑战与前景

摘要 计算机视觉作为人工智能的关键领域之一,正迅速改变我们的生活和工作方式。本文将探讨CV技术的主要优势、面临的挑战以及未来的发展方向。 关键词 计算机视觉, 人工智能, 数据处理, 自动化, 伦理问题 目录 引言计算机视觉技术的优势计算机视觉技术的挑战实…

企智汇软件:机电工程项目管理系统智能化管理,洞悉项目全貌!

在机电工程领域,项目管理的复杂性要求系统不仅要能够处理大量的数据和信息,还要能够提供实时的洞察和分析,以支持快速而明智的决策。企智汇机电工程项目管理系统正是为了满足这些需求而设计的,它通过一系列先进的功能,…

入门JavaWeb之 Response 验证码和重定向

Response 写验证码: package com.demo.response;import javax.imageio.ImageIO; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse…

安装vue开发者工具

浏览器控制台提示: 打开网址 GitHub - vuejs/devtools: ⚙️ Browser devtools extension for debugging Vue.js applications. 点击添加 上图地址:Installation | Vue Devtools 安装好了

JAVA期末速成库(7)第七、八章

一、习题介绍 第七章 Check Point:P251 7.2,7.4,7.16,8.2 Programming Exercise:7.10,7.14,7.26 二、习题及答案 Check Point: 7.2 When is the memory allocated for an ar…

入门JavaWeb之 JSP 语法、指令、内置对象和 JSTL 标签

导入 jar 包 搜索 jstl-api、standard pom.xml 导入 jar 包 <!-- Servlet 依赖 --><dependency><groupId>javax.servlet</groupId><artifactId>javax.servlet-api</artifactId><version>4.0.1</version><scope>provid…

C语言 | Leetcode C语言题解之第200题岛屿数量

题目&#xff1a; 题解&#xff1a; void cleanLand(char** grid, int gridSize, int ColSize,int row,int column) {if(grid[row][column] 1){//不等于1则清零grid[row][column] 0;}else{//不等于1则返回return ;}int newRow;int newColumn;//上if(row ! 0) //还能上{ne…

暑假本科生、研究生怎么学?来看详细的AI夏令营规划

Datawhale夏令营 发布&#xff1a;2024 AI 夏令营 学习规划 「学习内容详览」 01机器学习方向&#xff1a;2024/7/1~7/7 「Datawhale」邀请想入门人工智能领域并实践机器学习算法的学习者和我们一起来学习~ 详细学习规划如下&#xff1a; 02大模型技术方向&#xff1a;2024/7…

【面试题】信息系统安全运维要做什么

信息系统安全运维是确保信息系统稳定、可靠、安全运行的一系列活动和措施。 其主要包括以下几个方面&#xff1a; 1.系统监控&#xff1a; 实时监测信息系统的运行状态&#xff0c;如服务器的性能指标、网络流量、应用程序的运行情况等。通过监控工具&#xff0c;及时发现系统…

M芯片 Parallels Desktop 19虚拟机安装Windows11教程

Parallels Desktop 19 for Mac 乃是一款适配于 Mac 的虚拟化软件。它能让您在 Mac 计算机上同时运行多个操作系统。您可借此创建虚拟机&#xff0c;并于其中装设不同的操作系统&#xff0c;如 Windows、Linux 或 macOS。使用 Parallels Desktop 19 mac 版时&#xff0c;您可在 …

Volatility 内存取证【信安比赛快速入门】

一、练习基本命令使用 1、获取镜像信息 ./volatility -f Challenge.raw imageinfo 一般取第一个就可以了 2、查看用户 ./volatility -f Challenge.raw --profileWin7SP1x64 printkey -K "SAM\Domains\Account\Users\Names" 3、获取主机名 ./volatility -f Challenge…

微信小程序毕业设计-微信食堂线上订餐系统项目开发实战(附源码+论文)

大家好&#xff01;我是程序猿老A&#xff0c;感谢您阅读本文&#xff0c;欢迎一键三连哦。 &#x1f49e;当前专栏&#xff1a;微信小程序毕业设计 精彩专栏推荐&#x1f447;&#x1f3fb;&#x1f447;&#x1f3fb;&#x1f447;&#x1f3fb; &#x1f380; Python毕业设计…

UFS协议—新手快速入门(五)【11-13】

目录 十一、逻辑单元&#xff08;Logical Unit, LU&#xff09; 1、概念 2、UFS逻辑单元的独立特性 3、Well known LU &#xff08;1&#xff09;Boot Logical Units&#xff08;BOOT LUs&#xff09; &#xff08;2&#xff09;RPMB&#xff08;Replay Protected Memory…

使用提示词调教AI

“AI 是我们的数字员工&#xff0c;了解员工的秉性 &#xff0c; 从调教提示词开始。” 网上流传最广的提示词方法论&#xff0c;是“你需要给大模型一个角色”。这确实是一个好的策略&#xff0c;因为小学老师&#xff0c;大学老师这样的角色&#xff0c;预设很多背景信息。这…

独立开发者系列(11)——登录与鉴权

从原理上讲&#xff0c;登录很简单&#xff0c;就是输入账号密码和后台的数据库进行匹配&#xff0c;匹配上了就表示登录了&#xff0c;否则没有登录。这里主要总结的问题&#xff0c;用户登录之后&#xff0c;服务器端怎么确定你登录了&#xff0c;认定身份这个问题。 在刚学会…

德力西空调漏电保护开关HDF-LB32A40A家用电热水器漏电保护器开关

品牌 德力西 型号 HDF-LB 额定电流 40A,32A 漏电保护器类型 2P 产地 中国大陆 电压 1000V及以下 极数 2P 电源方式 交流电 3C证书编号 2020960306000014 独有外观&#xff0c;纤薄时尚&#xff0c;家用漏电保护开关&#xff0c;防触电&#xff0c;漏电保…

C语⾔数据类型和变量

C语⾔数据类型和变量 1.数据类型介绍1.1 字符型1.2 整型1.3 浮点型1.4 布尔类型1.5 各种数据类型的长度1.5.1 sizeof操作符1.5.2 数据类型长度1.5.3 sizeof中表达式不计算 2. signed 和 unsigned3. 数据类型的取值范围4. 变量4.1 变量的创建4.2 变量的分类 5. 算术操作符&#…

最新AI智能聊天对话问答系统源码(详细图文搭建部署教程)+AI绘画系统,DALL-E3文生图, Whisper TTS 语音识别,文档分析

一、人工智能 随着人工智能技术的持续进步&#xff0c;AI绘画已经发展成为一个日益成熟的领域。越来越多的人开始尝试使用AI绘画软件来创作艺术作品。尽管这些AI绘画软件对绘画领域产生了显著影响&#xff0c;但它们并不会完全取代画师。与传统手绘不同&#xff0c;AI绘画可以…

【C++】运算符重载(日期类的实现)

文章目录 前言一、运算符重载的概念和意义二、运算符重载的规则三、常用运算符重载1.关系运算符重载2.赋值运算符重载3.、-、、-重载4.前置和后置重载5.流插入<<和流提取>>重载 前言 之前在总结类的六个默认成员函数时&#xff0c;没有过多介绍运算符重载&#xf…

实时显示用户输入PySide6实例

如何用 PySide6 实现QLabel 实时显示用户在 QLineEdit 内输入的内容&#xff1f; 示例代码&#xff1a; # QLineEdit 用户输入内容&#xff0c;QLabel 即时显示用户输入训练from PySide6.QtWidgets import (QApplication, QWidget,QLabel, QLineEdit, QVBoxLayout)class MyWi…