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_OPTIONS
和LANG
,分别具有值-Dfile.encoding=UTF-8
和en_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 控制台打印编码字符的主要内容,如果未能解决你的问题,请参考以下文章