Jenkins "Консольный выход" местоположение журнала в файловой системе

Я хочу получить доступ и выполнить команду grep Jenkins Console Output в качестве этапа пост-сборки в той же работе, которая создает этот вывод. Перенаправление журналов с помощью >> log.txt не является решением, поскольку это не поддерживается моими шагами сборки.

Сложение:

echo "This is log"

Шаг сборки:

grep "is" path/to/console_output

Где конкретный файл журнала, созданный в файловой системе?

Ответы

Ответ 1

@Bruno Lavit имеет отличный ответ, но если вы хотите, вы можете просто получить доступ к журналу и загрузить его как txt файл в рабочее пространство из URL-адреса задания:

${BUILD_URL}/consoleText

Тогда это только вопрос загрузки этой страницы на ваш ${Workspace}

  • Вы можете использовать "Invoke ANT" и использовать цель GET
  • В Linux вы можете использовать wget для загрузки в рабочую область.
  • и др.

Удачи!

Изменить: Фактический файл журнала в файловой системе не находится на подчиненном устройстве, но хранится на главной машине. Вы можете найти его под: $JENKINS_HOME/jobs/$JOB_NAME/builds/lastSuccessfulBuild/log

Если вы ищете другую сборку, просто замените lastSuccessfulBuild на нужную вам конструкцию.

Ответ 2

Вы можете установить этот плагин журнала Jenkins Console, чтобы записывать журнал в рабочее пространство как шаг после сборки.

Вы должны создать плагин самостоятельно и установить плагин вручную.

Далее вы можете добавить шаг пост-сборки следующим образом:

enter image description here

С дополнительным шагом после сборки (сценарий оболочки) вы сможете выполнить поиск в своем журнале.

Я надеюсь, что это помогло :)

Ответ 3

Jenkins хранит консольный журнал на сервере. Если вы хотите программный доступ к журналу, и вы работаете на главном компьютере, вы можете получить доступ к журналу, который уже имеет Jenkins, не копируя его в артефакты или не получая URL-адрес задания http.

От http://javadoc.jenkins.io/archive/jenkins-1.651/hudson/model/Run.html#getLogFile(), это возвращает объект File для вывода консоли (в файловой системе jenkins это файл "log" в каталоге сборки сборки).

В моем случае мы используем прикованное (дочернее) задание для анализа и анализа родительской работы.

При использовании запуска groovy script в Jenkins вы получаете объект с именем "build" для запуска. Мы используем это, чтобы получить http://javadoc.jenkins.io/archive/jenkins-1.651/hudson/model/Build.html для восходящего задания, а затем вызвать это задание .getLogFile().

Добавлен бонус; так как это просто объект File, мы вызываем .getParent(), чтобы получить папку, в которой хранятся хранилища Jenkins, такие как test xmls, переменные среды и другие вещи, которые могут быть явно не показаны через артефакты), которые мы также можем анализировать.

Двойной дополнительный бонус; мы также используем задания матрицы. Иногда это приводит к тому, что путь к файлу в системе вызывает боль..getLogFile(). getParent() убирает всю боль.

Ответ 4

Это предназначено для использования, если у вас есть шаг сборки оболочки script. Для получения имени файла используйте только первые две строки.

Вы можете получить файл журнала консоли (используя bash magic) для текущей сборки из оболочки script таким образом и проверить ее на некоторую строку ошибки, если не найден результат:

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

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

Вам нужно создать имя файла, взяв JOB_URL, удалив часть ведущего узла хоста, добавив путь JENKINS_HOME, заменив "/job/" на "/jobs/" для обработки всех вложенных папок, добавив текущий номер сборки и имя файла.

Команда grep возвращает 0, если строка найдена и 2, если есть ошибка файла. Таким образом, 1 означает, что он нашел строку указания ошибки. Это приводит к сбою сборки.

Ответ 5

Для очень больших выходных журналов это может быть трудно открыть (задержка сети, прокрутка). Это решение, которое я использую для проверки больших файлов журнала:

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

в левом столбце вы видите: View as plain text. Сделайте правую кнопку мыши и выберите save links as. Теперь вы можете сохранить свой большой журнал в виде файла .txt. Откройте его с помощью notepad++, и вы сможете легко просматривать журналы без задержек в сети во время прокрутки.

Ответ 6

Я нашел консольный вывод моего задания в браузере в следующем месте:

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

Ответ 7

Местоположение журнала:

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

Получить журнал в виде текста и сохранить в рабочую область:

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