2016-10-26 3 views
1

Ich installierte Docker Container für Jenkins ver. 2.19.1.Holen Sie sich jenkins.BadHTTPException, wenn Sie versuchen, Versionsinformationen von jenkins laufen auf Docker

docker ps 
CONTAINER ID  IMAGE    COMMAND     CREATED    STATUS    PORTS            NAMES 
f03c10935bb3  jenkins    "/bin/tini -- /usr/lo" 29 hours ago  Up 3 hours   0.0.0.0:8080->8080/tcp, 0.0.0.0:50000->50000/tcp cocky_colden 

Installiert python-jenkins Modul zum Zugriff auf Jenkins Server.

Ich habe versucht, erste Codebeispiel in docs gegeben.

import jenkins 

server = jenkins.Jenkins('http://localhost:8080', username='admin', password='mytoken') 
user = server.get_whoami() 
version = server.get_version() 
print('Hello %s from Jenkins %s' % (user['fullName'], version)) 

Aber es gibt Fehler.

python /tmp/test.py 
Traceback (most recent call last): 
    File "/tmp/test.py", line 5, in <module> 
    version = server.get_version() 
    File "/usr/lib/python2.7/site-packages/jenkins/__init__.py", line 616, in get_version 
    % self.server) 
jenkins.BadHTTPException: Error communicating with server[http://localhost:8080/] 

Ich überprüfe die Dokumentation, die erwähnt:

Von Jenkins vesion 1.426 Weiter Sie eine API angeben Token statt des echten Passwort, während der Benutzer gegen die Instanz Jenkins zu authentifizieren.

Ich habe ein Passwort anstelle von token verwendet, bekomme aber den gleichen Fehler.

versuchte ich curl

curl -X POST http://localhost:8080/job/testjob/build \ 
> --data token=mytoken \ 
> --data-urlencode json='{"parameter": [{"name":"id", "value":"123"}, {"name":"verbosity", "value":"high"}]}' 
<html> 
<head> 
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/> 
<title>Error 403 No valid crumb was included in the request</title> 
</head> 
<body><h2>HTTP ERROR 403</h2> 
<p>Problem accessing /job/testjob/build. Reason: 
<pre> No valid crumb was included in the request</pre></p><hr><i><small>Powered by Jetty://</small></i><hr/> 

</body> 
</html> 

I Token erhalten von Name-> Konfigurieren -> anzeigen API Token ...

Gibt es etwas, was ich von jenkins Seite ermöglichen müssen zugreifen? bedeutet, API wird Zugriff auf diesen Server erhalten?

+1

Ich hatte das gleiche Problem und löste es mit: ' sudo apt-get installieren python-setuptools' –

+0

hat es auch für Sie funktioniert? –

+0

Ich habe genau das gleiche Problem. Die Installation von python-setuptools hat in meinem Fall nicht geholfen. – Enfors

Antwort

2

Versuchen Sie, die Jenkins-Sicherheitseinstellungen zu überprüfen - diese stellten sich in meinem Fall als das Problem heraus.

+0

Danke Enfors, das funktioniert für mich – Nilesh

+0

Froh, dass ich helfen kann! – Enfors

5

Es scheint einen kleineren Fehler in der Funktion get_version() zu geben.

Wenn der Jenkins-Server-Setup mit Sicherheit aktiviert ist und wenn der anonyme Benutzer die Rechte ‚Gesamt lesen‘ nicht hat, dann müssen Sie den Autorisierungsschlüssel() übergeben

dh in der Datei urlopen 'jenkins/__ init__.py‘, die get_version() Funktion geändert werden muss:

def get_version(self): 
    try: 
     request = Request(self._build_url('')) 
     request.add_header('X-Jenkins', '0.0') 
     response = urlopen(request, timeout=self.timeout) 

an:

def get_version(self): 
    try: 
     request = Request(self._build_url('')) 
     if self.auth: 
      request.add_header('Authorization', self.auth) 
     request.add_header('X-Jenkins', '0.0') 
     response = urlopen(request, timeout=self.timeout) 

zu finden, wo dieses Modul auf Ihrem System ist, führt Python und gibt ein:

import jenkins 
jenkins.__file__ 

(Ich habe den Fehler zu den Modul Autoren berichtet)

+0

Das rettete meinen Tag in großem Stil. Vielen Dank für diesen Fehler. – MasonWinsauer

Verwandte Themen