Как использовать плагин ANSIcolor в Jenkins?
Я установил плагин ANSI-цвета для Jenkins. В Jobs я активировал этот плагин с профилем по умолчанию "xterm".
Я не могу понять, как раскрасить вывод Консольного журнала при печати в журнал из пакетных файлов (платформа Windows).
Документация по
https://wiki.jenkins-ci.org/display/JENKINS/AnsiColor+Plugin
не полезно Там нет примеров, как на самом деле печатать в цвете.
Я пробовал несколько разных команд echo / print, но я не могу заставить цвета работать.
Любая подсказка приветствуется.
6 ответов
Цветовой плагин ANSI преобразует вывод вашей консоли в HTML. Если ваш вывод содержит escape-последовательности ANSI, он преобразует эти специальные последовательности символов в (цветной) HTML. Вы можете настроить отображение только через 'ANSI color map'.
Пример:
\ x1b [31м трансформирует HTML красный цвет
Похоже, что ваша программа не использует Escape-последовательности. Но если вы написали свое собственное программное обеспечение или скрипт, вы можете использовать эти последовательности Escape.
1-й пример BASH:
echo -e "\033[31mRed\033[0m"
2-й пример BASH:
printf "\033[31mRed\033[0m"
Если вам это нужно, вы должны добавить последовательность новой строки в printf:
printf "\033[31mRed\033[0m\n"
Еще побег последовательности:
Английский: http://en.wikipedia.org/wiki/ANSI_escape_code
Deutsch: http://de.wikipedia.org/wiki/Escape-Sequenz
Здесь доступно гораздо больше документации по плагину Jenkins-ANSIcolor: https://github.com/dblock/jenkins-ansicolor-plugin
Я не видел цветов, потому что я использовал цвета "высокой интенсивности" (в диапазоне 90-х), и они не поддерживаются. Должен придерживаться цвета в 30-х годах
- Дважды проверьте, что программное обеспечение действительно выводит цвета ANSI. Например, bash-скрипт, выполняющий это эхо, будет производить цвет с установленным плагином AnsiColor, но он будет создавать испорченные escape-последовательности в выводе консоли без плагина.
В BASH:
echo -e '\033[35mPurple!\033[0m'
Проверьте конфигурацию вашего проекта, проверьте "Среду сборки" и убедитесь, что "Color ANSI Console Output" отмечен.
Если вы не можете найти раздел "Build Environment", перейдите в раздел "Управление плагинами", чтобы еще раз проверить, действительно ли установлен нужный плагин.
(Я недавно установил плагин "Ansible" вместо "AnsiColor"....)
Вывод на консоль Jenkins - это место, где вы можете потратить приличное количество времени, пытаясь выяснить, что пошло не так (или, возможно, правильно?).
Плагины AnsiColor дают вам возможность раскрасить монохроматический вывод консоли Jenkins.
Пошаговое руководство
- Установите плагин AnsiColor. В разделе "Среда сборки" установите флажок "Цвет".
Цветной вывод на консоль ANSI - должен выглядеть
TesterFenster Inside Выполнить шаг оболочки и добавить что-то вроде:
set +x
info() {
echo "\033[1;33m[Info] \033[0m $1"
}
error() {
echo "\033[1;31m[Error] \033[0m $1"
}
success() {
echo "\033[1;32m[Success] \033[0m $1"
}
info "This is information message"
error "Houston we have a problem"
success "Great!!!"
echo "Foreground colors"
echo "\033[31m Red \033[0m"
echo "\033[32m Green \033[0m"
echo "\033[33m Yellow \033[0m"
echo "\033[34m Blue \033[0m"
siz
echo "\033[35m Magneta \033[0m"
echo "\033[36m Cyan \033[0m"
echo "Background colors"
echo "\033[41m Red \033[0m"
echo "\033[42m Green \033[0m"
echo "\033[43m Yellow \033[0m"
echo "\033[44m Blue \033[0m"
echo "\033[45m Magneta \033[0m"
echo "\033[46m Cyan \033[0m"
echo "Different combinations"
echo "\033[1;31m Red \033[0m"
echo "\033[1;4;37;42m Green \033[0m"
echo "\033[1;43m Yellow \033[0m"
set -x
Это работает только с консоли Jenkins, а не с реальных скриптов, которые выводятся на вашу консоль.
ОП явно спросил об использовании плагина AnsiColor Jenkins в Windows, так что вот мой ответ:
cmd.exe не является эмулятором терминала
Как писал @ocodo, cmd.exe
(запускается Jenkins) не является эмулятором терминала, поэтому по умолчанию он не поддерживает вывод ANSI из пакетных команд. Так что это просто не поддерживается в Windows.
Эти тесты не увенчались успехом в Jenkins с использованием этапа пакетной сборки Windows:
echo \e[33m hello \e[0m
echo \033[33m hello \033[0m
echo \x1b[33m hello \x1b[0m
echo \27[33m hello \27[0m
echo \[33m hello \[0m
echo ←[33m hello ←[0m
Последняя строка: чтобы вставить символ ESC в форму тестового окна Firefox, нажмите alt+27, что также является escape-последовательностью в большинстве редакторов. дополнительная информация здесь: http://www.robvanderwoude.com/ansi.php и https://groups.google.com/forum/
Решение: использовать печать Python для раскраски текста
Задания сборки, использующие Python для вывода на консоль, не имели проблем с AnsiColor, поэтому, если Python доступен в вашей среде, где вывод на консоль генерируется скриптом, вы можете вводить оттуда коды ANSI. Вот как я работал над этим, чтобы сделать его ярким.
- Создать вспомогательный скрипт в
util/ansiGreen.py
вот так:
#!/usr/bin/env python
print("\033[32m");
- Зарегистрируйтесь как env var на уровне вашей глобальной конфигурации сборки:
set ansiGreen=python %cdRootPath%util\ansiGreen.py
- Добавьте его в свои скрипты:
call make-some-tests.bat
if %errorlevel% gtr 0 (
%ansiRed%
echo [ERROR] You screwed up trunk!
%ansiOff%
)
Как вы видете, %ansiOff%
также требуется, чтобы закончить с окраской (его просто "\033[0m"
печатается через питон). Остальное все после %ansiRed%
будет в красном.
Этот сценарий выполняется на рабе Дженкинса. Настроить и получить среду непосредственно в шаге пакетной сборки Jenkins - еще одна задача.
Это немного уродливо, но после долгих исследований кажется лучшим выходом из ситуации, позволяющей вернуть AnsiColor мастеру Windows Jenkins от подчиненного устройства Windows Jenkins.