web-dev-qa-db-fra.com

Jenkins "Console Output" emplacement du journal dans le système de fichiers

Je souhaite accéder à la sortie de la console Jenkins de la console grep en tant qu’étape de post-génération dans le même travail qui crée cette sortie. La redirection des journaux avec >> log.txt n'est pas une solution, car cela n'est pas pris en charge par mes étapes de construction.

Construire:

echo "This is log"

Étape de construction:

grep "is" path/to/console_output

Où se trouve le fichier journal spécifique créé dans le système de fichiers?

15
Sayid

@Bruno Lavit a une excellente réponse, mais si vous le souhaitez, vous pouvez simplement accéder au journal et le télécharger en tant que fichier txt sur votre espace de travail à partir de l'URL du travail: 

${BUILD_URL}/consoleText

Ensuite, il suffit de télécharger cette page sur votre ${Workspace}

  • Vous pouvez utiliser "Invoke ANT" et utiliser la cible GET
  • Sous Linux, vous pouvez utiliser wget pour le télécharger sur votre espace de travail.
  • etc.

Bonne chance! 

Edit: Le fichier journal réel sur le système de fichiers ne se trouve pas sur l'esclave, mais est conservé sur la machine maître. Vous pouvez le trouver sous: $JENKINS_HOME/jobs/$JOB_NAME/builds/lastSuccessfulBuild/log

Si vous cherchez une autre version, remplacez simplement lastSuccessfulBuild par celle que vous recherchez. 

30
Dvir669

Vous pouvez installer ce fichier plugin Jenkins log plugin pour écrire le journal dans votre espace de travail en tant qu’étape de post-génération.

Vous devez construire le plugin vous-même et installer le plugin manuellement .

Ensuite, vous pouvez ajouter une étape de post-génération comme celle-ci:

 enter image description here

Avec une étape supplémentaire de post-construction (script shell), vous pourrez récupérer votre journal.

J'espère que ça a aidé :)

10
Bruno Lavit

Jenkins stocke le journal de la console sur le maître. Si vous souhaitez un accès programmatique au journal et que vous utilisez le maître, vous pouvez accéder au journal que Jenkins possède déjà, sans le copier sur les artefacts ni avoir à obtenir l'URL du travail http.

De http://javadoc.jenkins.io/archive/jenkins-1.651/hudson/model/Run.html#getLogFile () , cela retourne l’objet File pour la sortie de la console (dans le système de fichiers jenkins, this est le fichier "log" dans le répertoire de sortie de la construction).

Dans mon cas, nous utilisons un travail chaîné (enfant) pour effectuer l'analyse et l'analyse sur la construction du travail parent.

Lorsque vous utilisez un script groovy exécuté dans Jenkins, vous obtenez un objet nommé "build" pour l'exécution. Nous l'utilisons pour obtenir le http://javadoc.jenkins.io/archive/jenkins-1.651/hudson/model/Build.html pour le travail en amont, puis appelez le fichier .getLogFile () de ce travail.

Bonus ajouté; Puisqu'il ne s'agit que d'un objet File, nous appelons .getParent () pour obtenir le dossier dans lequel Jenkins stocke les garanties (telles que les xml de test, les variables d'environnement et d'autres éléments qui ne sont pas explicitement exposés), que nous pouvons également analyser.

Double bonus ajouté; nous utilisons également des travaux matriciels. Cela rend parfois difficile de déduire le chemin du fichier sur le système. .getLogFile (). getParent () enlève toute la douleur.

9
Ben

Pour les journaux de sortie très volumineux, l’ouverture peut être difficile (délai réseau, défilement). Voici la solution que j'utilise pour vérifier les gros fichiers journaux:

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

dans la colonne de gauche, vous voyez: View as plain text. Faites un clic droit avec le bouton droit de la souris et choisissez save links as. Vous pouvez maintenant enregistrer votre gros journal sous forme de fichier .txt. Ouvrez-le avec notepad ++ et vous pourrez parcourir facilement vos journaux sans délai réseau lors du défilement.

4
lvthillo

Ceci est conçu pour une utilisation lorsque vous avez une étape de construction de script shell. Utilisez uniquement les deux premières lignes pour obtenir le nom du fichier.

Vous pouvez obtenir le fichier journal de la console (à l'aide de bash magic) pour la construction actuelle à partir d'un script Shell de cette manière et rechercher une chaîne d'erreur qui échoue si le travail est trouvé:

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

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

Vous devez créer le nom de fichier en prenant le JOB_URL, en supprimant la partie principale du nom d'hôte, en ajoutant le chemin d'accès à JENKINS_HOME, en remplaçant "/ job /" par "/ jobs /" pour gérer tous les dossiers imbriqués, en ajoutant le numéro de construction actuel et le nom du fichier.

Grep renvoie 0 si la chaîne est trouvée et 2 en cas d'erreur de fichier. Donc, 1 signifie qu'il a trouvé la chaîne d'indication d'erreur. Cela fait échouer la construction.

3
Lee Meador

J'ai trouvé la sortie console de mon travail dans le navigateur à l'emplacement suivant:

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

2

Emplacement du journal:

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

Obtenir le journal sous forme de texte et l'enregistrer dans l'espace de travail:

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