Wie trigger authentifiziert Jenkins job mit Datei-parameter mit standard-Python-Bibliothek
Sind wir derzeit Auslösung Jenkins-jobs aus einem Python-Skript mit Hilfe von PycURL. Wir möchten jedoch, um loszuwerden, das PycURL Abhängigkeit, haben aber wenig Erfolg gehabt bisher. Was macht unser Szenario komplizierter ist, die wir brauchen, um die post eine Datei als parameter. Unsere aktuellen PycURL Logik für die Buchung der Anfrage sieht wie folgt aus:
url = "https://myjenkins/job/myjob/build"
with contextlib.closing(pycurl.Curl()) as curl:
curl.setopt(pycurl.URL, url)
curl.setopt(pycurl.USERPWD, "myuser:mypassword")
curl.setopt(pycurl.SSL_VERIFYPEER, False)
curl.setopt(pycurl.SSL_VERIFYHOST, False)
curl.setopt(pycurl.FAILONERROR, True)
data = [
("name", "integration.xml"),
("file0", (pycurl.FORM_FILE, "integration.xml")),
("json", "{'parameter': [{'name': 'integration.xml', 'file': 'file0'}]}"),
("Submit", "Build"),
]
curl.setopt(pycurl.HTTPPOST, data)
try:
curl.perform()
except pycurl.error, err:
raise JenkinsTriggerError(curl.errstr())
Wie ersetzen wir diese mit den Funktionen von der standard Python Bibliothek?
Wir haben vorher versucht, musste aber aufgeben, da wir nicht sehen konnte, wie Sie Dateien hochladen erfolgreich, wie man sehen kann aus meine Frage zu diesem Thema.
- Sie scheinen mit
https
. Beachten Sie, dasshttplib
undurllib2
nicht, überprüfen Sie das server-Zertifikat bei der Verbindung um eine HTTPS-website (siehe offizielle Dokumentation), so wird es nicht in der Lage sein, um die Verbindung herzustellen sicher. (Sie können umgehen dies, indem er diehttplib
Verbindung mit derssl
Modul.) - Wenn Sie einen Blick auf meinen code, werden Sie sehen, dass ich sage cURL zu ignorieren HTTPS-Zertifikat 🙂 Es ist eine intranet-Website, also sollte es nicht egal.
- Warum Sie verwenden möchten, urllib2/httplib über pycURL?
- Da pycURL ist eine Abhängigkeit würde ich eher vermeiden.
- pycURL basiert auf libcurl (Reine C-code), die nachweislich bessere performance und Stabilität über das urllib und httplib. Darüber hinaus ist jeder linux-Rechner kommt mit cURL, während pycURL ist nur eine einzige api-code zu locken.
- Es ist immer noch eine (zu) schwere Abhängigkeit
- zu schwer? wie? Kann u aufwendigen ur Beobachtung? Ich m der neue admin von pycURL und sicherstellen können, eine Lösung in der nächsten Version planen wir für nächsten Monat.. .
- Wir haben zu bauen/installieren, und cURL manuell über Windows
- hw abt eine exe-Datei ? one-Klick-installation fr windows?
- Das wäre definitiv eine Verbesserung. Ich denke, die automatische installation durch EasyInstall wäre nicht machbar (wegen der libcurl-Abhängigkeit)?
- lemme diskutieren, wenn wir können, zählen libcurl mit pycurl in einem Paket.. .
- alle updates? Können Sie post-Codes (vielleicht, was Sie hatte, in dieser anderen Frage)?
- Siehe meine Antwort, das ist das beste, das ich kommen konnte mit.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ich habe eine Lösung gefunden, mit der Anfragen und urllib3 Bibliotheken. Nicht ganz standard, aber leichter als die PycURL Abhängigkeit. Es sollte möglich sein, dies direkt mit Anforderungen (Vermeidung der urllib3 Teil), aber ich lief in einen Fehler.
Wenn Sie vertraut sind mit python, dann können Sie mit der jenkins REST-APT python-wrapper zur Verfügung gestellt von der offiziellen Website. finden Sie unter diesem link.
Trigger ein zu bauen, ist unglaublich leicht durch die Nutzung dieser python-wrapper. Hier ist mein Beispiel:
Für diejenigen, die nicht wissen, wo Sie finden den token, hier ist, wie:
Genießen.
Wir es tun können, mit Hilfe von Anfragen nur Bibliothek.
Jekins-Krümel können bei Bedarf bezogen werden über:
Kann wahrscheinlich wie folgt Aussehen:
Sorry, habe ich nicht installiert Jenkins um es zu testen.
Hier ist eine ähnliche version zu aknuds1 Antwort, wo
test_result
ist eine xml-Zeichenfolge:Einnahme eine Vermutung auf, zusätzliche Parameter übergeben werden würde, als ein Teil der json string-array, oder weitere Dateien, etc. Lassen Sie mich wissen, wenn dies der Fall ist, auch, wenn ich herausfinden, ich werde aktualisieren diese Antwort. Diese Lösung funktioniert gut, um die trigger-JUnit-tests.
Version:
Eine weitere Alternative, die ich verwendet habe :
Weitere details finden Sie unter :Stellen Sie eine Anfrage