get python version_python-jenkins:调用get_version()提示Error communicating with server

本文介绍了在使用python-jenkins库时遇到的`Error communicating with server`错误,通过三种方法进行解决:修改Jenkins全局安全设置、在代码中添加认证方法以及直接修改库的源码。针对不同版本的python-jenkins,提供了适用的解决方案。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

欢迎关注我的微信公众号:「阿拉平平」

报错说明

首先贴一下自己写的脚本:

# -*- coding: utf-8 -*-

import jenkins

class JenkinsAPI:

"""

Installing:

pip install python-jenkins

Import:

import jenkins

"""

def __init__(self):

self.url = 'http://127.0.0.1:8080/'

self.username = 'admin'

self.password = 'admin'

self.server = self._connect()

def _connect(self):

return jenkins.Jenkins(self.url, username=self.username, password=self.password)

def get_version(self):

"""get jenkins version"""

print(self.server.get_version())

if __name__ == '__main__':

jenkins_obj = JenkinsAPI()

jenkins_obj.get_version()

执行脚本报错如下:

During handling of the above exception, another exception occurred:

Traceback (most recent call last):

File "test.py", line 30, in

jenkins_obj.get_version()

File "test.py", line 25, in get_version

print(self.server.get_version())

File "/data/temp_venv/lib/python3.6/site-packages/jenkins/__init__.py", line 812, in get_version

% self.server)

jenkins.BadHTTPException: Error communicating with server[http://127.0.0.1:8080/]

解决方法

方法一:修改Jenkins的全局安全设置

如图所示:勾选 匿名用户具有可读权限 选项即可

68dd714e6c31

全局安全设置.png

方法二:在代码中加入一个认证方法

在_init_()方法中,加上了self.server.get_whoami() 由于该方法能够有认证信息,所以再调用get_verson() 就可以获取到

def __init__(self):

self.url = 'http://127.0.0.1:8080/'

self.username = 'admin'

self.password = 'admin'

self.server = self._connect()

self.server.get_whoami()

方法三:修改源码

源码位置在:site-packages/jenkins/__init__.py,找到get_version方法,代码从

def get_version(self):

try:

request = requests.Request('GET', self._build_url(''))

request.headers['X-Jenkins'] = '0.0'

response = self._response_handler(self._request(request))

return response.headers['X-Jenkins']

except (req_exc.HTTPError, BadStatusLine):

raise BadHTTPException("Error communicating with server[%s]"

% self.server)

改为:

def get_version(self):

try:

self._maybe_add_auth() # 添加这句即可

request = requests.Request('GET', self._build_url(''))

request.headers['X-Jenkins'] = '0.0'

response = self._response_handler(self._request(request))

return response.headers['X-Jenkins']

except (req_exc.HTTPError, BadStatusLine):

raise BadHTTPException("Error communicating with server[%s]"

% self.server)

写在后面

之后我查看了一下模块的源码,发现代码有所差异。我本地安装的是1.1.0,而博客中使用的应该是0.4的版本,修改方法并不适用高版本。

抽空又看了下源码,已补上修改源码的方法。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值