如何追踪Jenkins任务执行过程中访问的所有URL?
追踪Jenkins上Python项目执行期间访问的URL
以下是几个无需深入梳理项目代码的可行方案:
1. 给Python请求库打补丁自动记录URL
如果项目用requests或urllib这类主流HTTP库,直接通过补丁或钩子拦截所有请求并记录:
针对requests库的实现
在Jenkins任务的Python执行脚本最开头加入这段代码,会自动把所有requests发起的URL打印到日志:
import requests from requests.models import Response def log_request(response: Response, *args, **kwargs): print(f"[HTTP_REQUEST] {response.request.method} {response.request.url}") return response # 给所有requests请求添加钩子 requests.hooks.register('response', log_request)
通用补丁方案(兼容更多库)
如果项目混用多种HTTP库,可以patch底层的socket.connect来记录所有出站连接的域名/IP,再结合端口判断HTTP/HTTPS:
import socket original_connect = socket.socket.connect def patched_connect(self, address): host, port = address print(f"[OUTBOUND_CONNECT] {host}:{port}") return original_connect(self, address) socket.socket.connect = patched_connect
这种方式会记录所有网络连接,后续可以从Jenkins日志里筛选出疑似HTTP服务的端口(80/443/自定义端口)对应的域名。
2. 在Jenkins节点上用网络抓包工具
直接在Jenkins构建步骤中调用系统级抓包工具,捕获任务运行期间的所有HTTP/HTTPS流量:
用tcpdump的示例
在Jenkins构建的前置步骤添加shell命令(Linux/macOS适用):
# 启动抓包,保存到临时文件,只捕获80/443端口的流量 tcpdump -i any port 80 or port 443 -w /tmp/jenkins_http_traffic.pcap & # 记录抓包进程ID,方便后续停止 echo $! > /tmp/tcpdump_pid.txt
在构建的后置步骤添加shell命令停止抓包并解析:
# 停止抓包进程 kill $(cat /tmp/tcpdump_pid.txt) # 解析抓包文件并输出到Jenkins日志(需安装tshark) tshark -r /tmp/jenkins_http_traffic.pcap -T fields -e http.request.method -e http.request.full_uri | grep -v "^$"
构建结束后,Jenkins日志里会直接列出所有访问的HTTP/HTTPS URL。
3. 优化:按进程ID过滤抓包(避免干扰)
如果Jenkins节点上有多个任务同时运行,可以通过进程ID过滤抓包,确保只捕获当前任务的流量:
# 获取当前Python项目进程的PID(替换为你的主脚本名) PYTHON_PID=$(pgrep -f "python your_main_script.py") # 只捕获该进程的80/443端口流量 tcpdump -i any port 80 or port 443 and pid $PYTHON_PID -w /tmp/jenkins_http_traffic.pcap &
内容的提问来源于stack exchange,提问作者Ivan D
相关产品推荐
相关产品推荐

