Jenkins任务因urllib3超时值类型错误失败,求解决方案
解决Jenkins任务中requests/urllib3超时参数错误问题
自2023年5月4日16:00起,Jenkins任务开始失败,报错信息如下:
Traceback (most recent call last): File "/home/jenkins/agent/workspace/my-jenkins-job/.tox/appdev-ci-staging/lib/python3.9/site-packages/jenkins/__init__.py", line 822, in get_info return json.loads(self.jenkins_open( File "/home/jenkins/agent/workspace/my-jenkins-job/.tox/appdev-ci-staging/lib/python3.9/site-packages/jenkins/__init__.py", line 560, in jenkins_open return self.jenkins_request(req, add_crumb, resolve_auth).text File "/home/jenkins/agent/workspace/my-jenkins-job/.tox/appdev-ci-staging/lib/python3.9/site-packages/jenkins/__init__.py", line 576, in jenkins_request self.maybe_add_crumb(req) File "/home/jenkins/agent/workspace/my-jenkins-job/.tox/appdev-ci-staging/lib/python3.9/site-packages/jenkins/__init__.py", line 373, in maybe_add_crumb response = self.jenkins_open(requests.Request( File "/home/jenkins/agent/workspace/my-jenkins-job/.tox/appdev-ci-staging/lib/python3.9/site-packages/jenkins/__init__.py", line 560, in jenkins_open return self.jenkins_request(req, add_crumb, resolve_auth).text File "/home/jenkins/agent/workspace/my-jenkins-job/.tox/appdev-ci-staging/lib/python3.9/site-packages/jenkins/__init__.py", line 579, in jenkins_request self._request(req)) File "/home/jenkins/agent/workspace/my-jenkins-job/.tox/appdev-ci-staging/lib/python3.9/site-packages/jenkins/__init__.py", line 553, in _request return self._session.send(r, **_settings) File "/home/jenkins/agent/workspace/my-jenkins-job/.tox/appdev-ci-staging/lib/python3.9/site-packages/requests/sessions.py", line 701, in send r = adapter.send(request, **kwargs) File "/home/jenkins/agent/workspace/my-jenkins-job/.tox/appdev-ci-staging/lib/python3.9/site-packages/requests/adapters.py", line 483, in send timeout = TimeoutSauce(connect=timeout, read=timeout) File "/home/jenkins/agent/workspace/my-jenkins-job/.tox/appdev-ci-staging/lib/python3.9/site-packages/urllib3/util/timeout.py", line 119, in __init__ self._connect = self._validate_timeout(connect, "connect") File "/home/jenkins/agent/workspace/my-jenkins-job/.tox/appdev-ci-staging/lib/python3.9/site-packages/urllib3/util/timeout.py", line 156, in _validate_timeout raise ValueError( ValueError: Timeout value connect was <object object at 0x7efe5adb9aa0>, but it must be an int, float or None.
未修改任何配置,推测是上游依赖更新导致的问题,任务使用了Python的requests库,依赖urllib3,求解决方法。
错误原因
这个问题源于urllib3 2.0+版本对超时参数的类型校验逻辑变得严格,而旧版requests(<2.31.0)或python-jenkins库没有适配这种变化,传递了非数值/None类型的对象作为超时参数,触发了类型校验报错。
解决方案
1. 锁定urllib3到兼容版本
在项目的requirements.txt或tox配置文件中添加版本限制,回退到无严格校验的旧版本:
urllib3<2.0
或直接通过pip安装指定版本:
pip install urllib3==1.26.16
此方法可快速恢复任务运行。
2. 更新requests到适配版本
升级requests到支持urllib3 2.0+的版本,解决兼容性问题:
pip install requests>=2.31.0
requests 2.31.0及以上版本已修复超时参数传递的适配问题。
3. 更新python-jenkins库
错误栈显示问题出在jenkins库的调用流程中,尝试升级python-jenkins到最新版本:
pip install python-jenkins>=1.8.0
新版本库可能已修复超时参数的传递错误。
4. 代码中显式设置超时
若上述方法无法立即实施,可在调用jenkins库时显式指定合法的超时值(整数、浮点数或None):
import jenkins # 显式设置超时为30秒 server = jenkins.Jenkins('http://jenkins-server/', username='user', password='pass', timeout=30)
强制传递合规参数,避免无效对象触发报错。
内容的提问来源于stack exchange,提问作者Abdullah Khawer
相关产品推荐
相关产品推荐

