如何在 Jenkins 中设置默认编码?
Posted
技术标签:
【中文标题】如何在 Jenkins 中设置默认编码?【英文标题】:How do you set the default encoding in Jenkins? 【发布时间】:2011-08-29 21:24:03 【问题描述】:我有一个输出非 ascii 字符的 python 脚本。 它在命令行中运行良好(具有 LANG en_US.UTF-8),但是一旦我尝试在 Jenkins 中运行它(从同一个 shell 启动),它就会以 ascii 终端的典型方式失败:
UnicodeEncodeError: 'ascii' codec can't encode character u'\xe5' in position 37: ordinal not in range(128)
我尝试在“执行 shell”构建步骤中执行脚本调用,如下所示:
export LANG=en_US.UTF-8
但是,它似乎忽略了这一点。将以下内容放入我的 python 脚本中:
print "Encoding = %s" % sys.getdefaultencoding()
无论我做什么,都会给我这个:
Encoding = ascii
那么有什么东西可以让我强制 Jenkins 使用 UTF-8 吗?
【问题讨论】:
我对这个问题的更一般的答案感兴趣。我认为下面的 Python hack 不适用于 Python 3.x... 如果您使用 Jenkins 管道,请使用pipeline agent label 'nodename' environment LC_ALL = 'en_US.UTF-8' LANG = 'en_US.UTF-8' LANGUAGE = 'en_US.UTF-8' ...
【参考方案1】:
没关系,知道怎么做:
export PYTHONIOENCODING=UTF-8
【讨论】:
你在詹金斯哪里设置的? 在调用 python 脚本之前,在“执行 shell”构建步骤中添加该行。 Python 不会查看 LANG 环境变量,但会查看 PYTHONIOENCODING 变量。 您不必为每个脚本都这样做。而是在 Jenkins > 管理 Jenkins > 配置系统 > 环境变量 > 添加中将 PYTHONIOENCODING 设置为 UTF-8。无需重启 Jenkins 即可生效。【参考方案2】:如果您想在 Jenkins 安装中设置系统级别的编码,您可以使用 name=LANG
和 value=<insert your locale here>
将其添加为全局属性键值对(Jenkins -> Manage Jenkins -> Configure System) (在我的情况下等于en_GB.UTF-8
)。这样您就可以避免为每个 Jenkins 作业设置语言环境。
【讨论】:
对于 Jenkins 2.60.2:在这里尝试了所有选项之后,我开始尝试组合。将PYTHONIOENCODING
:UTF-8
存储为环境变量终于奏效了。
谢谢 TemporalWolf,它为我解决了这个问题。我完全被卡住了一段时间。【参考方案3】:
如果您使用的是 Jenkins Pipeline,则需要将管道内的编码设置为:
pipeline
agent label 'node name'
environment
LC_ALL = 'en_US.UTF-8'
LANG = 'en_US.UTF-8'
LANGUAGE = 'en_US.UTF-8'
stages
stage ('XXXX')
steps
echo 'Hello'
【讨论】:
【参考方案4】:export PYTHONIOENCODING=UTF-8
对我不起作用。然而,
export LC_CTYPE=en_US.UTF-8
做了。
【讨论】:
【参考方案5】:我的解决方案是:升级到最新版本 Jenkins。似乎最新版本尊重系统区域设置。看看,例如,this patch 可能吗?
无论如何,Ubuntu 13.10 附带的默认设置已经过时。从他们的官方 debian repo 中拉下最新版本已为我修复了它!
https://wiki.jenkins-ci.org/display/JENKINS/Installing+Jenkins+on+Ubuntu
【讨论】:
【参考方案6】:另一种解决方案是使用 Python 3
brew update
brew install pyenv
pyenv install 3.7.3
pyenv local 3.7.3
make virtualenv
【讨论】:
这个错误只会出现如果你使用的是Python 3,所以这不会有太大帮助。以上是关于如何在 Jenkins 中设置默认编码?的主要内容,如果未能解决你的问题,请参考以下文章
如何在 Visual Studio 2010 中设置默认编码
如何在 Blazemeter 测试中通过 Jenkins 在 .jmx 文件中设置参数