web-dev-qa-db-de.com

Jenkins "Console Output" Protokollspeicherort im Dateisystem

Ich möchte auf Jenkins Console Output als Post-Build-Schritt in demselben Job zugreifen, in dem diese Ausgabe erstellt wird. Das Umleiten von Protokollen mit >> log.txt ist keine Lösung, da dies von meinen Erstellungsschritten nicht unterstützt wird.

Bauen:

echo "This is log"

Post Build-Schritt:

grep "is" path/to/console_output

Wo ist die spezifische Protokolldatei im Dateisystem erstellt?

15
Sayid

@Bruno Lavit hat eine großartige Antwort, aber wenn Sie möchten, können Sie einfach auf das Protokoll zugreifen und es als TXT-Datei von der Job-URL in Ihren Arbeitsbereich herunterladen: 

${BUILD_URL}/consoleText

Dann müssen Sie nur diese Seite in Ihren ${Workspace} herunterladen.

  • Sie können "Invoke ANT" verwenden und das GET-Ziel verwenden
  • Unter Linux können Sie wget verwenden, um es in Ihren Arbeitsbereich herunterzuladen
  • usw.

Viel Glück! 

Bearbeiten: Die eigentliche Protokolldatei im Dateisystem befindet sich nicht auf dem Slave, sondern auf dem Master-Rechner. Sie finden es unter: $JENKINS_HOME/jobs/$JOB_NAME/builds/lastSuccessfulBuild/log

Wenn Sie nach einem anderen Build suchen, ersetzen Sie einfach lastSuccessfulBuild durch den Build, nach dem Sie suchen. 

30
Dvir669

Sie können dieses Jenkins Console-Protokoll -Plug-In installieren, um das Protokoll als Post-Build-Schritt in Ihren Arbeitsbereich zu schreiben.

Sie müssen das Plugin selbst erstellen und das Plugin manuell installieren .

Als Nächstes können Sie einen Post-Build-Schritt wie folgt hinzufügen:

enter image description here

Mit einem zusätzlichen Post-Build-Schritt (Shell-Skript) können Sie Ihr Protokoll anzeigen.

Ich hoffe es hat geholfen :)

10
Bruno Lavit

Jenkins speichert das Konsolenprotokoll auf dem Master. Wenn Sie programmgesteuert auf das Protokoll zugreifen möchten und auf Master laufen, können Sie auf das Protokoll zugreifen, das Jenkins bereits hat, ohne es in die Artefakte zu kopieren oder die http-Job-URL zu erhalten.

Aus http://javadoc.jenkins.io/archive/jenkins-1.651/hudson/model/Run.html#getLogFile () wird das File-Objekt für die Konsolenausgabe zurückgegeben (im jenkins-Dateisystem: this) ist die "log" -Datei im Build-Ausgabeverzeichnis).

In meinem Fall verwenden wir einen verketteten (untergeordneten) Job, um das Build eines übergeordneten Jobs zu analysieren und zu analysieren.

Wenn Sie ein grooviges Skript verwenden, das in Jenkins ausgeführt wird, erhalten Sie ein Objekt namens "build" für den Lauf. Wir verwenden dies, um http://javadoc.jenkins.io/archive/jenkins-1.651/hudson/model/Build.html für den Upstream-Job abzurufen, und rufen dann .getLogFile () dieses Jobs auf.

Zusätzlicher Bonus; Da es sich nur um ein Dateiobjekt handelt, rufen wir .getParent () auf, um den Ordner abzurufen, in dem Jenkins Build-Collateral speichert (wie Test-XMLs, Umgebungsvariablen und andere Dinge, die möglicherweise nicht explizit durch die Artefakte verfügbar gemacht werden), die wir auch analysieren können.

Doppelter zusätzlicher Bonus; Wir verwenden auch Matrixjobs. Dies macht es manchmal schmerzhaft, auf den Dateipfad im System zu schließen. .getLogFile (). getParent () beseitigt alle Schmerzen.

9
Ben

Bei sehr großen Ausgabeprotokollen kann das Öffnen schwierig sein (Netzwerkverzögerung, Bildlauf). Dies ist die Lösung, mit der ich große Protokolldateien überprüfe:

https://URL/jenkins/job/name/

in der linken Spalte sehen Sie: View as plain text. Mach einen rechts Mausklick darauf und wähle save links as. Jetzt können Sie Ihr großes Protokoll als TXT-Datei speichern. Öffnen Sie es mit Notepad ++ und Sie können Ihre Protokolle ohne Netzwerkverzögerungen während des Bildlaufs problemlos durchgehen.

5
lvthillo

Dies ist für die Verwendung bei einem Shell-Skripterstellungsschritt vorgesehen. Verwenden Sie nur die ersten zwei Zeilen, um den Dateinamen abzurufen.

Sie können die Konsolenprotokolldatei (mithilfe von bash magic) für das aktuelle Build auf diese Weise von einem Shell-Skript abrufen und auf Fehlerzeichenfolgen überprüfen. Wenn dies nicht möglich ist, schlägt der Job fehl:

logFilename=${JENKINS_HOME}/${JOB_URL:${#JENKINS_URL}}
logFilename=${logFilename//job\//jobs\/}builds/${BUILD_NUMBER}/log

grep "**Failure**" ${logFilename} ; exitCode=$?
[[ $exitCode -ne 1 ]] && exit 1

Sie müssen den Dateinamen erstellen, indem Sie JOB_URL verwenden, den führenden Host-Namensteil entfernen, den Pfad zu JENKINS_HOME hinzufügen, "/ job /" in "/ jobs /" setzen, um alle verschachtelten Ordner zu behandeln, und die aktuelle Build-Nummer hinzufügen und der Dateiname.

Das grep gibt 0 zurück, wenn der String gefunden wird, und 2, wenn ein Dateifehler vorliegt. Eine 1 bedeutet, dass die Zeichenfolge für die Fehleranzeige gefunden wurde. Das macht den Build fehl.

3
Lee Meador

Ich habe die Konsolenausgabe meines Jobs im Browser an folgender Stelle gefunden:

http://[Jenkins URL]/job/[Job Name]/default/[Build Number]/console

2

Protokollstandort:

${JENKINS_HOME}/jobs/${JOB_NAME}/builds/${BUILD_NUMBER}/log

Protokoll als Text abrufen und im Arbeitsbereich speichern:

cat ${JENKINS_HOME}/jobs/${JOB_NAME}/builds/${BUILD_NUMBER}/log >> log.txt
0
Alex T