【问题标题】:How to use the ANSIcolor plugin in Jenkins?如何在 Jenkins 中使用 ANSIcolor 插件?
【发布时间】:2012-09-07 20:36:31
【问题描述】:

我已经为 Jenkins 安装了 ANSI-color 插件。 在 Jobs 中,我使用默认配置文件“xterm”激活了该插件。

打印到控制台时,我无法弄清楚如何为控制台日志的输出着色 从批处理文件中记录日志(Windows 平台)。

关于

的文档

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

没有帮助。没有示例如何实际进行彩色打印。

我尝试了几种不同的回显/打印命令,但我无法让颜色起作用。

任何提示表示赞赏。

【问题讨论】:

  • 请注意,Windows 终端不是 ANSI 终端,因此默认情况下它不支持批处理命令的 ANSI 输出。你可以read this for some more info - 如果 Jenkins 插件在控制台日志中看到 ansi 转义文本输出,它将对其进行着色。
  • 根据github.com/dblock/jenkins-ansicolor-plugin,您必须在额外的课程中wrap sh 进行管道/工作流的另一个注释

标签: plugins jenkins ansi-colors


【解决方案1】:

ANSI-color 插件将您的控制台输出转换为 HTML。如果您的输出包含 ansi 转义序列,那么它将这些特殊字符序列转换为(彩色)HTML。您只能通过“ANSI 颜色映射”配置映射。

示例:
\x1b[31m 是将html颜色转换为红色

您的程序似乎没有使用转义序列。但如果您编写了自己的软件或脚本,则可以使用这些 Escape 序列。

第一个 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

【讨论】:

  • 小心,不是所有的echo 命令都支持-e。最好使用printf 来确保您的控制代码将被正确转义。
  • OP 询问了 Windows 批处理文件。有关 Windows - AnsiColor 解决方法,请参阅下面的答案。
  • 对于 Windows cmd,您可以简单地复制并粘贴 #027 ESC 字符以替换 \033^<ESC^> 序列,或者在命令提示符下按住 alt 并键入 @987654335 @
  • 请不要,如果您想真正看到 cmd 框中的颜色,可以使用 ConEMU、ansicon 或更新到 Windows 10 Threshold 2
【解决方案2】:

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

我没有看到颜色,因为我使用的是“高强度”颜色(在 90 年代范围内)并且不支持这些颜色。必须坚持 30 年代的颜色

【讨论】:

  • jenkins-ansicolor-plugin 版本 >= 0.4.3 支持高强度颜色(但如果您的 jenkins 安装有旧版本的 jansi,则可能无法使用;另请参阅 github.com/dblock/jenkins-ansicolor-plugin/issues/91)。 jenkins-ansicolor-plugin 0.4.4 版将提供更多属性和颜色支持。
【解决方案3】:
  1. 再次检查软件是否真的在输出 ANSI 颜色。例如,运行此 echo 的 bash 脚本会在安装了 AnsiColor 插件的情况下产生颜色,但它会在没有插件的情况下在控制台输出中产生混乱的转义序列。

在 BASH 中:

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

  2. 如果找不到“构建环境”部分,请转到管理插件以仔细检查是否确实安装了正确的插件。
    (我最近安装了“Ansible”插件而不是“ AnsiColor"....)

【讨论】:

  • 我遵循了所有这些步骤。我仍然无法在 Jenkins 的控制台输出中看到颜色......
【解决方案4】:

Jenkins 控制台输出是您可以花费大量时间尝试找出问题所在(或者可能是正确的?)的地方。

AnsiColor 插件让您有机会为单色 Jenkins 控制台输出着色。

分步指南

  1. 在构建环境部分下安装 AnsiColor 插件检查颜色 ANSI 控制台输出Jenkins -
  2. 彩色 ANSI 控制台输出 -should look like

  3. TesterFenster Inside 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
你应该看到your output

【讨论】:

    【解决方案5】:

    OP 明确询问在 Windows 上使用 AnsiColor Jenkins 插件,所以这是我的回答:

    cmd.exe 不是终端模拟器

    正如@ocodo 所写,cmd.exe(由 Jenkins 触发)不是终端模拟器,因此默认情况下它不支持批处理命令的 ANSI 输出。 所以这在 Windows 上是不支持的。

    这些测试在 Jenkins 中使用 Windows Batch 构建步骤不成功:

    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");
    
    • 在全局构建配置级别注册为 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% 也是必需的,以着色结束(它只是通过 python 打印的 "\033[0m")。 %ansiRed% 之后的其他所有内容都将显示为红色

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

    这有点难看,但经过大量研究后,它似乎是让 AnsiColor 从 Windows Jenkins 从站返回到 Windows Jenkins 主站的最佳解决方法。

    【讨论】:

    【解决方案6】:

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

    【讨论】:

      猜你喜欢
      • 2019-04-14
      • 2020-04-25
      • 2017-10-15
      • 2017-01-10
      • 1970-01-01
      • 2019-01-01
      • 1970-01-01
      • 2019-04-11
      • 2020-03-29
      相关资源
      最近更新 更多