Jenkins 控制台打印编码字符

Posted

技术标签:

【中文标题】Jenkins 控制台打印编码字符【英文标题】:Jenkins Console Print Encoded Characters 【发布时间】:2019-01-30 07:22:11 【问题描述】:

当从 linux 容器内运行的声明性管道输出字符时,是否可以更改编码以匹配终端的真实输出?即

├── file1                         +-- file1
├── file2                         +-- file2
└── file3                         +-- file3

^Formatting I want                ^Formatting I get

.

我尝试将以下参数传递给我的 Docker 代理:

-e JAVA_TOOL_OPTIONS="-Dfile.encoding=UTF-8" 

-e LC_ALL="en_US.UTF-8"

.

结合:

sh returnStdout: true, script: " "

用“——”代替“+--”,这似乎是“├──”的ANSI编码。

我正在使用 ansiColor 选项,但这似乎没有多大帮助。

.

我看到了这个类似的问题,但我不确定如何在管道中实施解决方案。

Jenkins: console output characters

【问题讨论】:

试试linkedin.com/pulse/… 【参考方案1】:

您可以使用 Jenkins II 将编码更改为 UTF-8。 去 Jenkins -> 管理 Jenkins -> 配置系统 -> 全局属性

并添加两个环境变量JAVA_TOOL_OPTIONSLANG,分别具有值-Dfile.encoding=UTF-8en_US.UTF-8

添加这些后,您可能需要重新启动 Jenkins。

参考:https://www.linkedin.com/pulse/how-resolve-utf-8-encoding-issue-jenkins-ajuram-salim/

更新:

或者您可以在jenkins.xml 文件中更新<arguments>。 例如

<arguments>-Xrs -Xmx256m -Dhudson.lifecycle=hudson.lifecycle.WindowsServiceLifecycle -Dfile.encoding=UTF-8 -jar "%BASE%\jenkins.war" --httpPort=8080 --webroot="%BASE%\war"</arguments>

【讨论】:

不幸的是,我试过了,但没有用。我可以通过删除我的本地 jenkins 并运行 java -Dfile.encoding=UTF-8 -jar jenkins.war 来解决我的问题,但是这个选项对于我们的生产 jenkins 是不可行的。你知道运行 java 命令的 jenkins 启动文件夹吗? 哦,你完全引导我找到了对我有用的答案。我在 jenkins 配置文件 (jenkins.xml) 中添加了“-Dfile.encoding=UTF-8” 谢谢!【参考方案2】:

这是 cloudbees 的官方回答。不幸的是,所有这些都不适合我。

https://support.cloudbees.com/hc/en-us/articles/360004397911-How-to-address-issues-with-unmappable-characters-

将这些添加到 master 和 agent 中的 JVM Arguments -

-Dfile.encoding=UTF-8 -Dsun.jnu.encoding=UTF-8

【讨论】:

只有这对我有帮助。 这也是唯一对我有用的解决方案。为了澄清,需要在主服务器上的 Jenkins.xml 文件、代理上的 jenkins-slave.xml 文件以及两者的参数部分中进行更改。【参考方案3】:

对我来说,问题实际上在于为“sh”管道步骤指定可选的“编码”参数:sh: Shell Script

当然,只有按照此处其他帖子中的描述正确设置了 file.encoding,这才有效。

【讨论】:

以上是关于Jenkins 控制台打印编码字符的主要内容,如果未能解决你的问题,请参考以下文章

在ASCII码字符编码中,啥字符无法显示或打印出来

jenkins:你们是怎么在控制台实时打印服务启动日志的?

ASCII 可打印字符与控制字符

控制台输出问题

Jenkins maven 构建乱码,修改file.encoding系统变量编码为UTF-8

关于ASCII编码(补12号)