企业代理环境下Jenkins中执行Curl命令失败求助
解决Jenkins容器内Curl命令Exit Code 7的问题
你遇到的exit code 7是curl的典型错误,代表无法建立到目标服务器的连接。结合你在无代理环境正常、企业代理环境失败的情况,问题根源是Jenkins容器内的curl进程没有使用企业代理配置。下面是几个针对性的解决方案:
方案一:启动Jenkins容器时配置全局代理环境变量
直接在docker run命令中添加代理相关的环境变量,让容器内所有进程(包括curl、docker命令)默认走代理:
修改你的启动命令,添加代理配置(替换成你的企业代理地址和端口):
docker run -d -u root --privileged \ -v jenkins_home:/var/jenkins_home \ -v /var/run/docker.sock:/var/run/docker.sock \ -v "$HOME":/home \ -e JENKINS_OPTS="--prefix=/jenkins" \ # 添加代理配置 -e http_proxy="http://your-proxy-host:proxy-port" \ -e https_proxy="http://your-proxy-host:proxy-port" \ # 排除内部服务不走代理(比如你的镜像仓库) -e no_proxy="registry.***.com.ar,localhost,127.0.0.1" \ --group-add 997 \ -p 8080:8080 -p 50000:50000 \ --name jenkins jenkinsci/blueocean
注意:如果你的企业代理需要用户名密码认证,可以写成
http://username:password@your-proxy-host:proxy-port
方案二:在Jenkinsfile的Curl命令中直接指定代理
如果不想全局配置代理,仅让curl走代理,可以在curl命令中添加--proxy参数:
修改Push Notification阶段的脚本:
stage('Push Notification') { steps { script{ withCredentials([string(credentialsId: 'telegramToken', variable: 'TOKEN'), string(credentialsId: 'telegramChatId', variable: 'CHAT_ID')]) { sh ''' curl -s -X POST \ # 添加代理参数 --proxy http://your-proxy-host:proxy-port \ https://api.telegram.org/bot${TOKEN}/sendMessage \ -d chat_id=${CHAT_ID} \ -d parse_mode="HTML" \ -d text=" <b>Jenkins CI:</b> <b>Iniciando build $BUILD_DISPLAY_NAME</b> $JOB_NAME" ''' } } } }
若代理需要认证,追加
--proxy-user username:password即可
方案三:在Jenkins系统中配置全局代理
通过Jenkins Web界面配置代理,让Jenkins本身(拉取Git代码、访问外部服务)和容器内进程都走代理:
- 登录Jenkins,进入Manage Jenkins → Configure System
- 找到HTTP Proxy Configuration区域:
- 勾选「Use proxy server」
- 填写代理服务器地址和端口
- 在「No Proxy Hosts」中添加你的内部镜像仓库地址(
registry.***.com.ar)、localhost等不需要走代理的地址 - 若代理需要认证,填写用户名和密码
- 保存配置后,重启Jenkins容器生效
额外排查建议
- 确认企业代理允许访问
api.telegram.org:部分企业代理会屏蔽外部聊天工具API,需要联系IT部门确认是否放行该域名 - 测试容器内的连通性:进入Jenkins容器
docker exec -it jenkins bash,直接执行带代理参数的curl命令,验证是否能正常连接Telegram API,快速定位问题 - 检查变量解析:可以在sh脚本中先
echo $TOKEN $CHAT_ID,确认凭证变量是否正确注入
内容的提问来源于stack exchange,提问作者juan ocho
相关产品推荐
相关产品推荐

