所以我有一些虛擬機,我正在創建這個 python 腳本,它連接到我們正在運行的 Jenkins 網站,并且一切正常:

然后我在另一臺服務器上運行完全相同的代碼,但這次我得到了這個有線錯誤?
$ py test.py
Traceback (most recent call last):
File "C:\programs\python3102\lib\site-packages\urllib3\connectionpool.py", line 597, in urlopen
httplib_response = self._make_request(conn, method, url,
File "C:\programs\python3102\lib\site-packages\urllib3\connectionpool.py", line 343, in _make_request
self._validate_conn(conn)
File "C:\programs\python3102\lib\site-packages\urllib3\connectionpool.py", line 839, in _validate_conn
conn.connect()
File "C:\programs\python3102\lib\site-packages\urllib3\connection.py", line 337, in connect
self.sock = ssl_wrap_socket(
File "C:\programs\python3102\lib\site-packages\urllib3\util\ssl_.py", line 344, in ssl_wrap_socket
return context.wrap_socket(sock, server_hostname=server_hostname)
File "C:\programs\python3102\lib\ssl.py", line 512, in wrap_socket
return self.sslsocket_class._create(
File "C:\programs\python3102\lib\ssl.py", line 1070, in _create
self.do_handshake()
File "C:\programs\python3102\lib\ssl.py", line 1341, in do_handshake
self._sslobj.do_handshake()
ssl.SSLCertVerificationError: [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed: self signed certificate in certificate chain (_ssl.c:997)
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "C:\programs\python3102\lib\site-packages\requests\adapters.py", line 439, in send
resp = conn.urlopen(
File "C:\programs\python3102\lib\site-packages\urllib3\connectionpool.py", line 637, in urlopen
retries = retries.increment(method, url, error=e, _pool=self,
File "C:\programs\python3102\lib\site-packages\urllib3\util\retry.py", line 398, in increment
raise MaxRetryError(_pool, url, error or ResponseError(cause))
urllib3.exceptions.MaxRetryError: HTTPSConnectionPool(host='xxx.com', port=443): Max retries exceeded with url: /crumbIssuer/api/json (Caused by SSLError(SSLCertVerificationError(1, '[SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed: self signed certificate in certificate chain (_ssl.c:997)')))
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "C:\Users\usnname\Desktop\test.py", line 20, in <module>
test = jenkins_connection.get_node_info(node)
File "C:\programs\python3102\lib\site-packages\jenkins\__init__.py", line 1504, in get_node_info
response = self.jenkins_open(requests.Request(
File "C:\programs\python3102\lib\site-packages\jenkins\__init__.py", line 557, in jenkins_open
return self.jenkins_request(req, add_crumb, resolve_auth).text
File "C:\programs\python3102\lib\site-packages\jenkins\__init__.py", line 573, in jenkins_request
self.maybe_add_crumb(req)
File "C:\programs\python3102\lib\site-packages\jenkins\__init__.py", line 370, in maybe_add_crumb
response = self.jenkins_open(requests.Request(
File "C:\programs\python3102\lib\site-packages\jenkins\__init__.py", line 557, in jenkins_open
return self.jenkins_request(req, add_crumb, resolve_auth).text
File "C:\programs\python3102\lib\site-packages\jenkins\__init__.py", line 576, in jenkins_request
self._request(req))
File "C:\programs\python3102\lib\site-packages\jenkins\__init__.py", line 550, in _request
return self._session.send(r, **_settings)
File "C:\programs\python3102\lib\site-packages\requests\sessions.py", line 646, in send
r = adapter.send(request, **kwargs)
File "C:\programs\python3102\lib\site-packages\requests\adapters.py", line 514, in send
raise SSLError(e, request=request)
requests.exceptions.SSLError: HTTPSConnectionPool(host='xxx.com', port=443): Max retries exceeded with url: /crumbIssuer/api/json (Caused by SSLError(SSLCertVerificationError(1, '[SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed: self signed certificate in certificate chain (_ssl.c:997)')))
似乎它在抱怨一些certificate error?,我以前沒見過這個,所以我想知道我是否可以就尋找什么來解決這個問題得到一些建議?
兩臺機器都運行python 3.10.2,并且安裝了相同的包。
代碼本身如下所示:
try:
import jenkins
except ImportError:
import pip
pip.main(["install", "--upgrade", "python-jenkins"])
import jenkins
# Login settings
JENKINS_URL = "https: // xxx.com"
USERNAME = "xxx"
API_TOKEN = "xxx"
JENKINS_NODES = ["PD100089"]
# Connect to server with API token
jenkins_connection = jenkins.Jenkins(JENKINS_URL, USERNAME, API_TOKEN)
# Loop through list of nodes and make them online
for node in JENKINS_NODES:
# Get node XML configurations
test = jenkins_connection.get_node_info(node)
# Check if XML node configuration is online/offline
if not test['offline']:
print("- " node " is already online...")
# Stop script
continue
# Turn node back online
print("- Turning " node " back online...")
jenkins_connection.enable_node(node)
我可以毫無問題地從谷歌瀏覽器訪問兩臺機器上的網站。
uj5u.com熱心網友回復:
您的第二臺服務器似乎在證書鏈中有自簽名證書。您可以嘗試禁用 SSL 驗證。
jenkins = Jenkins(url, username, password, ssl_verify=False)
你可以在這里閱讀更多。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/498208.html
