2016-05-04 21 views
7

Gibt es eine eingebaute Variable, die Zugriff auf den Text des gerade ausgeführten Builds gibt?Jenkinsfile Buildprotokoll

Ich versuchte mit etwas wie currentBuild.log, currentBuild.buildLog aber ohne Glück.

Antwort

2

Eigentlich ist es möglich, currentBuild.rawBuild.log oder besser (nicht weiterentwickelt) currentBuild.rawBuild.getLog(100) (für die letzten 100 Zeilen), Referenz: http://javadoc.jenkins-ci.org/hudson/model/Run.html#getLog-int-

+1

Mit 1.652 Multibranch-Pipeline, das funktioniert nicht :('org.jenkinsci.plugins.scriptsecurity.sandbox.RejectedAccessException: Skripts nicht erlaubt, Methode zu verwenden hudson.model.Run getLog int' & die my.jenkins.site/scriptApproval/ Seite zeigt es nicht einmal. Ich bin immer noch auf der Suche nach einer Antwort auf dieses ärgerliche Problem –

+0

@JasonDeArte - Haben Sie dies auf dem aktuellen Jenkins LTS mit aktuellen Plugin-Versionen ausprobiert? – BitwiseMan

+0

Ich brauchte lange um diese Antwort zu finden. Dies bietet eine Möglichkeit zu sagen, ob ein Build abgebrochen wurde, was noch nicht klar ist - https://issues.jenkins-ci.org/browse/JENKINS-28822 –

2

Derzeit nicht. (Eigenschaften von currentBuild, sind im Abschnitt Snippet Generator »Globale Variablen durch die Art und Weise.)

Es konnte umgesetzt werden, ziemlich leicht, obwohl es nicht gut wäre maßstabs mit riesigen aufbaut. JENKINS-28119 würde eine besser skalierbare Lösung für die vermutete zugrunde liegende Anfrage bieten.

+0

Eigentlich versuche ich die Protokolle zu analysieren, um alle bereitgestellten Artefakte ('mvn clean deploy') zu erhalten und falls die Server-Tests fehlschlagen, möchte ich diese Artefakte aus dem Nexus-Repository entfernen die Protokolle für * Uploaded: http ..... * Text und tun HTTP DELETE für sie. –

+0

Wenn Sie Ihre bereitgestellten Artefakte mit einer Variablen versionieren, auf die Sie zugreifen können, z. B. Ihrer Build-Nummer oder Ihrem Git-Commit, können Sie sie möglicherweise löschen, indem Sie die Artefaktnamen mithilfe der Variablen erstellen. Wenn Sie Hunderte von Artefakten veröffentlichen, die nicht so gut funktionieren werden, –

+0

Dann nur 'sh 'mvn sauber deploy | Abschlag '; def logs = readFile "logs", ohne zu versuchen, auf die Logs des _build_ als Ganzes zuzugreifen. –

3

ich viel für eine Lösung gesucht, das Protokoll zu analysieren.

  • Verwendung rawBuild war nicht in Ordnung, weil ich ohne zusätzliche Genehmigungen meine Skripte in einer Sandbox ausführen will
  • Verwendung tee in den Schritten, dass ich nicht in Ordnung analysieren wollen war, weil ich nicht will vorherige Schritte ändert, noch will ich nicht mein ganzes Protokoll im RAM haben (und leider musste ich, dass auf einem Windows-Rechner)

fand ich eine Lösung von Jesse Glicks Antwort inspiriert:

  • Unter my.jenkins.url/Pipeline-Syntax/Globals Sie sehen können, dass der manager -variable ermöglicht es Ihnen, das Protokoll zu analysieren, indem manager.logContains(regexp) oder manager.getLogMatcher(regexp)
  • So verwenden, wenn Sie nur überprüfen wollen, dass Ihr Protokoll enthält Zeichenfolge myTestString Sie nur manager.logContains('.*myTestString.*') nennen
  • Wenn Sie einige Informationen aus dem ersten Anpassungslinie erhalten möchten Sie manager.getLogMatcher(regexp)

Leider fand ich keine Möglichkeit, können Sie die ganze log (getLogMatcher gibt nur die erste passende Zeile Matcher zu analysieren). So sehe ich z.Zt. keinen Weg zu z.B. Zählen Sie, wie oft eine Protokolldatei eine spezielle Zeichenfolge enthält.

Verwandte Themen