如何在 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=LANGvalue=<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 文件中设置参数

如何在 Jenkins 声明式管道中设置 PATH

如何在 Jenkins Groovy 中设置位置参数

如何在 Jenkins 中设置多种身份验证方式,例如 LDAP 和 Jenkins 用户数据库?

如何在 Jenkins 声明式管道中设置声纳扫描仪