如何在Jenkins中使用ANSIcolor插件?

51

我已经为Jenkins安装了ANSI-color插件。

在作业中,我使用默认配置文件'xterm'激活了该插件。

我不知道如何在从批处理文件(Windows平台)打印到日志时对控制台日志的输出进行着色。

关于此的文档:

https://wiki.jenkins-ci.org/display/JENKINS/AnsiColor+Plugin

并没有提供有用的帮助。它没有给出实际如何以彩色打印的例子。

我尝试了几个不同的echo/print命令,但无法使颜色生效。

非常感谢任何提示。


1
请注意,Windows终端不是ANSI终端,因此默认情况下不支持批处理命令的ANSI输出。您可以阅读此处以获取更多信息 - 如果Jenkins插件在控制台日志中看到ansi转义文本输出,它将对其进行着色处理。 - ocodo
2
对于Pipeline/工作流,还有一个需要注意的地方是,根据 https://github.com/dblock/jenkins-ansicolor-plugin,您必须在额外的类中“包装” sh - MarkHu
6个回答

20

ANSI-color插件可以将控制台输出转换为HTML格式。如果您的输出包含ANSI转义序列,则会将这些特殊字符序列转换为(彩色)HTML。您只能通过“ANSI颜色映射”来配置映射关系。

例如:
\x1b[31m 被转换为红色HTML颜色。

看起来您的程序没有使用转义序列。但如果您编写自己的软件或脚本,可以使用这些转义序列。

第一个例子BASH:

echo -e "\033[31mRed\033[0m"

第二个例子 BASH:

printf "\033[31mRed\033[0m"
如果需要的话,你需要在printf中添加一个换行符序列:
printf "\033[31mRed\033[0m\n"

更多转义序列:
英文: http://en.wikipedia.org/wiki/ANSI_escape_code
德文: http://de.wikipedia.org/wiki/Escape-Sequenz


2
请注意,不是所有的 echo 命令都支持 -e 选项。最好使用 printf 命令来确保控制字符被正确转义。 - ocodo
OP 询问了关于 Windows 批处理文件的问题。请见下面我提供的 Windows - AnsiColor 解决方法。 - domih
对于Windows cmd,您可以简单地复制并粘贴#027 ESC字符来替换\033^<ESC^>序列,或者在命令提示符下按住alt键并输入027 - schletti2000
请注意,如果您想在cmd框中实际看到颜色,可以使用ConEMU、ansicon或升级到Windows 10 Threshold 2。 - schletti2000

10

这里有更多关于Jenkins-ANSIcolor插件的文档: https://github.com/dblock/jenkins-ansicolor-plugin

我之前没有看到颜色是因为我使用了“高亮度”颜色(在90年代的范围内),而这些颜色不受支持。只能使用30年代的颜色。


2
jenkins-ansicolor-plugin版本>=0.4.3支持高强度颜色(但如果您的jenkins安装了旧版本的jansi,则可能无法正常工作;另请参见https://github.com/dblock/jenkins-ansicolor-plugin/issues/91)。jenkins-ansicolor-plugin版本0.4.4将提供更多属性和颜色支持。 - Joe

8
  1. 仔细检查软件是否真的输出 ANSI 颜色。例如,运行此 echo 的 bash 脚本将在安装了 AnsiColor 插件的情况下产生颜色,但在没有插件的情况下会在控制台输出中产生混乱的转义序列。

在 BASH 中:

echo -e '\033[35mPurple!\033[0m'
  1. 检查您的项目配置,查看“构建环境”,确保选择了“彩色 ANSI 控制台输出”。

  2. 如果找不到“构建环境”部分,请前往“管理插件”进行双重检查,确保正确安装了所需的插件。
    (我最近意外安装了“Ansible”插件而非“AnsiColor”...)


1
我按照所有这些步骤操作了,但是我仍然无法在Jenkins的控制台输出中看到颜色。 - ASM

7

Jenkins控制台输出是您可以花费相当多的时间来尝试弄清楚出了什么问题(或者也许是对的?)。

AnsiColor插件为您提供了在单色Jenkins控制台输出中着色的机会。

逐步指南

  1. 安装AnsiColor插件,在“Build Environment”部分选择“Color ANSI Console Output” -
  2. 颜色ANSI控制台输出应该看起来像这个

  3. TesterFenster在Execute shell步骤中添加类似以下内容:

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

you should see like your output


4
这仅适用于Jenkins控制台,而不适用于实际脚本输出到您的控制台输出。

1

OP明确询问如何在Windows上使用AnsiColor Jenkins插件,这是我的答案:

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

最后一行:要在Firefox测试框表单中注入ESC字符,请按alt+27,这也是大多数编辑器中的转义序列。更多信息请参见:http://www.robvanderwoude.com/ansi.php#AnsiColorhttps://groups.google.com/forum/#!topic/jenkinsci-users/0OcjlZQfqrk

解决方案:使用Python打印文本颜色

使用Python进行控制台输出的构建作业没有AnsiColor问题,因此,如果您的环境中有Python生成脚本的控制台输出,则可以从那里注入ANSI代码。以下是我解决它变得丰富多彩的方法。

  • 创建一个辅助脚本util/ansiGreen.py,如下所示:
#!/usr/bin/env python
print("\033[32m");
  • 在全局构建配置级别上将其注册为环境变量:
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%来结束着色(它只是通过Python打印的"\033[0m")。否则,在%ansiRed%之后的所有内容都将是红色

此脚本在Jenkins从机上运行。在Jenkins批处理构建步骤中直接设置和获取环境是另一个挑战。

虽然有点丑陋,但经过大量研究,似乎这是使AnsiColor能够从Windows Jenkins从机返回到Windows Jenkins主机的最佳解决方法。


1
有点过于复杂了,也许我可以使用这个代替(参见这个答案)。 - derHugo

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接