Журнал сборки Jenkinsfile

Есть ли встроенная переменная, которая дает доступ к тексту текущей сборки?

Я пытался использовать что-то вроде currentBuild.log, currentBuild.buildLog, но безуспешно.


person Krzysztof Krasoń    schedule 04.05.2016    source источник


Ответы (4)


На самом деле можно использовать currentBuild.rawBuild.log или лучше (не рекомендуется) currentBuild.rawBuild.getLog(100) (для последних 100 строк), ссылка: http://javadoc.jenkins-ci.org/hudson/model/Run.html#getLog-int-

person Krzysztof Krasoń    schedule 18.07.2016
comment
С многоветвевым конвейером 1.652 это не работает :( org.jenkinsci.plugins.scriptsecurity.sandbox.RejectedAccessException: Scripts not permitted to use method hudson.model.Run getLog int и страница my.jenkins.site/scriptApproval/ даже не показывает это. Я все еще ищу ответ на эту неприятную проблему - person Jason De Arte; 21.09.2016
comment
@JasonDeArte - Вы пробовали это на текущей Jenkins LTS с текущими версиями плагинов? - person BitwiseMan; 14.01.2017
comment
Мне потребовалось много времени, чтобы найти этот ответ. Это дает один из способов определить, была ли сборка прервана, что еще не указано явно — Issues.jenkins-ci.org/browse/JENKINS-28822 - person Display Name is missing; 04.04.2017
comment
Как я могу получить ВСЕ журналы текущей сборки? currentBuild.rawBuild.getLog(100) работает, но currentBuild.rawBuild.getLog() не работает (пусто), хотя я надеялся получить все журналы. - person DenCowboy; 05.12.2017

Я много искал решение для анализа журнала.

  • использовать rawBuild было неправильно, потому что я хочу выполнять свои скрипты в песочнице без дополнительных согласований
  • использовать tee в шагах, которые я хочу проанализировать, было неправильно, потому что я не хочу изменять предыдущие шаги и не хочу, чтобы весь мой журнал был в ОЗУ (и, к сожалению, мне это нужно на машине с Windows)

Я нашел решение, вдохновленное ответом Джесси Гликса:

  • В разделе my.jenkins.url/pipeline-syntax/globals вы можете видеть, что переменная manager позволяет вам анализировать журнал с помощью manager.logContains(regexp) или manager.getLogMatcher(regexp).
  • Поэтому, если вы просто хотите проверить, содержит ли ваш журнал строку myTestString, вы можете просто вызвать manager.logContains('.*myTestString.*')
  • Если вы хотите получить некоторую информацию из первой соответствующей строки, вы можете использовать manager.getLogMatcher(regexp)

К сожалению, я не нашел способа проанализировать весь журнал (getLogMatcher возвращает только первую совпадающую строку Matcher). Поэтому я не вижу в настоящее время способа, например. подсчитайте, как часто файл журнала содержит специальную строку.

person Sergej Werfel    schedule 05.10.2016
comment
в jenkins/pipeline-syntax/globals больше нет менеджера по состоянию на август 2018 года. Но есть currentBuild, у которого есть свойство rawBuild, которое имеет getLog (int). - person Andrey Regentov; 21.08.2018

Не сейчас. (Кстати, свойства currentBuild задокументированы в разделе Генератор фрагментов » Глобальные переменные.)

Его можно реализовать довольно легко, хотя он не будет хорошо масштабироваться при больших сборках. JENKINS-28119 обеспечит более масштабируемое решение того, что, как я предполагаю, является вашим базовым запросом. является.

person Jesse Glick    schedule 05.05.2016
comment
На самом деле я пытаюсь проанализировать журналы, чтобы получить все развернутые артефакты (mvn clean deploy), и в случае сбоя тестов сервера я хочу удалить эти артефакты из репозитория nexus, самый простой способ в настоящее время для меня - проанализировать журналы для загруженных : http..... text и выполните для них HTTP DELETE. - person Krzysztof Krasoń; 06.05.2016
comment
Если вы управляете версиями своих развернутых артефактов с помощью какой-либо переменной, к которой вы можете получить доступ, например, номер сборки или коммит git, вы можете удалить их, создав имена артефактов с использованием переменной. Если вы публикуете сотни артефактов, это не будет работать слишком хорошо. - person Mark Chorley; 23.05.2016
comment
Затем просто sh 'mvn clean deploy | tee logs'; def logs = readFile 'logs', не пытаясь получить доступ к журналам сборки в целом. - person Jesse Glick; 24.05.2016

Поскольку Дженкинс дает вам BUILD_URL, вы можете скачать его:

sh('wget -q --no-check-certificate -O build.log ' + BUILD_URL + 'consoleText')
person Axel Heider    schedule 13.04.2021