2016-11-04 5 views
1

Ich versuche, die Ausgabe des Startskript von Jenkins zu erfassen, aber alles, was ich bekomme, ist eine leere Ausgabe.So erfassen Sie den Jenkins-Start Log

Die Ausgabe von Jenkins im Terminal

erscheint
#!/bin/bash 
function sendNotificationOnSlack() { 
    curl -X POST ... 
} 
export -f sendNotificationOnSlack 
java -Dhudson.DNSMultiCast.disabled=true -jar /usr/local/opt/jenkins/libexec/jenkins.war --httpPort=3999 | awk '/Jenkins is fully up and running/ {system("bash -c sendNotificationOnSlack")}' 

ich auch versucht habe, die Ausgabe des TTY zu erfassen, aber als leer

#!/bin/bash 
currentTTY=$(tty) 
echo $currentTTY 
function sendNotificationOnSlack() { 
    curl -X POST ... 
} 
export -f sendNotificationOnSlack 
java -Dhudson.DNSMultiCast.disabled=true -jar /usr/local/opt/jenkins/libexec/jenkins.war --httpPort=3999 
tail -f $currentTTY | awk '/Jenkins is fully up and running/ {system("bash -c sendNotificationOnSlack")}' 

Ich habe versucht, überall zu suchen, aber ich erscheint kann die Datei jenkins.log nicht finden, hat jemand einen Vorschlag?

+0

Ich bin nicht ganz sicher, über das Problem, aber wenn Sie die Ausgabe erfassen müssen, sollten Sie vielleicht Jenkins in einem Prozess spawnen und das Protokoll von einem anderen erfassen. Das heißt, vielleicht sollten Sie die Ausgaben [so] "abschlagen" (http://stackoverflow.com/questions/692000/how-do-i-write-stderr-to-a-file-while-using-tee- mit-a-pipe) in Dateien und verarbeiten von dort aus, entfernen Sie die Rohrleitungen in "awk". 'awk' kann für die Dateien verwendet werden, die von' tee' geschrieben wurden. – alok

+0

Außerdem gehe ich davon aus, dass die Logs nicht in '/ var/log/jenkins/jenkins.log' fallen sollen, richtig? – alok

+0

@alok Danke für die Antwort. Das Problem ist, dass die Ausgabe nicht erfasst wird und selbst wenn piped "awk" in der Shell angezeigt wird (ein Zeichen, das nicht umgeleitet wird, aber immer noch an denselben Ort geht). Ich habe bereits überprüft auf '/ var/log/jenkins /' und der Ordner ist leer –

Antwort

0

Erstellen Sie die folgende groovy Datei: $ JENKINS_HOME/init.groovy.d/extra logging.groovy

Restart Jenkins und überprüfen Verzeichnis $ JENKINS_HOME/logs/

import java.util.logging.ConsoleHandler 
import java.util.logging.FileHandler 
import java.util.logging.SimpleFormatter 
import java.util.logging.LogManager 
import jenkins.model.Jenkins 

def logsDir = new File(Jenkins.instance.rootDir, "logs") 

if(!logsDir.exists()){ 
    println "--> creating log dir"; 
    logsDir.mkdirs(); 
} 

def loggerWinstone = LogManager.getLogManager().getLogger(""); 
FileHandler handlerWinstone = new FileHandler(logsDir.absolutePath + "/jenkins-winstone.log", 1024 * 1024, 10, true); 

handlerWinstone.setFormatter(new SimpleFormatter()); 
loggerWinstone.addHandler (new ConsoleHandler()); 
loggerWinstone.addHandler(handlerWinstone);