Jenkins部署的Golang应用无法访问Temporal IO Server问题咨询
问题排查及解决步骤
优先排查Jenkins环境变量覆盖问题
Makefile中定义的变量优先级低于外部传入的环境变量,Jenkins全局配置、任务构建环境配置中如果注入了代理相关变量,会覆盖你Makefile中写的配置,特别是no_proxy如果缺失.domain.com规则,会导致访问server2.domain.com:11111时走了公网代理,而公网代理无法转发内网Temporal端口的请求,直接导致连接失败。
你可以在Jenkins任务配置页的「构建环境」板块、Jenkins全局系统配置页查看是否有强制注入的代理变量。验证运行时代理配置实际值
在Makefile的run目标中添加环境变量打印命令,执行Jenkins构建后查看输出的代理配置是否符合预期:
run: env | grep -E "(proxy|PROXY)" | sort ./App $(TEMPORAL_SERVER)
如果输出的no_proxy/NO_PROXY值和Makefile中定义的不一致,即可确认是环境变量覆盖问题。
- 修复Go应用的代理变量识别问题
Go标准库、Temporal底层依赖的gRPC库会同时兼容大小写两种格式的代理环境变量,你当前Makefile中只定义了小写的http_proxy/no_proxy,如果Jenkins执行环境中没有自动同步大写变量,会导致应用没有读取到NO_PROXY规则,仍然走代理请求Temporal服务。
修改Makefile同时声明大小写变量并导出到子进程:
http_proxy=http://myproxy.domain.com:80 HTTP_PROXY=http://myproxy.domain.com:80 https_proxy=http://myproxy.domain.com:80 HTTPS_PROXY=http://myproxy.domain.com:80 no_proxy=".domain.com,127.0.0.0/8,localhost" NO_PROXY=".domain.com,127.0.0.0/8,localhost" # 导出变量确保传递给Go应用子进程 export http_proxy HTTP_PROXY https_proxy HTTPS_PROXY no_proxy NO_PROXY TEMPORAL_SERVER=server2.domain.com:11111 run: ./App $(TEMPORAL_SERVER)
- 排查Jenkins运行用户的网络限制
如果上述配置都正常,需验证Jenkins运行用户的网络权限:Jenkins服务通常使用独立的jenkins系统用户运行,部分环境会对该用户配置iptables规则、网络ACL限制,禁止访问非标准端口。你可以在run目标中添加端口连通性测试命令验证:
run: nc -zv server2.domain.com 11111 || echo "Jenkins运行用户无法访问Temporal服务端口" ./App $(TEMPORAL_SERVER)
如果测试连通失败,联系运维人员放开Jenkins运行用户对server2.domain.com:11111的访问权限即可。
内容的提问来源于stack exchange,提问作者Eduardo A EDUARDO Fernandez Di
相关产品推荐
相关产品推荐

