在 Jenkins 系统和 Jenkins 的构建中正确 file.encoding
Proper file.encoding in Jenkins system and in Jenkins' builds
我在 Jenkins 上设置编码属性时遇到问题。
在测试 Jenkins 的“系统信息”页面上,master 显示 file.encoding = UTF-8
和 sun.jnu.encoding = UTF-8
。相同的值显示在从站的“系统信息”页面上。 slave配置中的JVM Options
字段不包含-Dfile.encoding=UTF-8
,但是就像我写的一样,系统信息中的编码是可以的。当我 运行 使用 withMaven 方法在该从站上运行脚本时,在日志中有 Default locale: pl_PL, platform encoding: UTF-8
.
在 master 的生产 Jenkins“系统信息”页面上显示 file.encoding = UTF-8
和 sun.jnu.encoding = UTF-8
。但是在从站的“系统信息”页面上,两个属性的值都为 ANSI_X3.4-1968
。当我将 -Dfile.encoding=UTF-8
添加到从属配置 file.encoding = UTF-8
中的 JVM Options
字段时。在 slave 上运行相同的管道脚本放入日志文件 Default locale: en_US, platform encoding: ANSI_X3.4-1968
。我可以将 -Dfile.encoding=UTF-8
设置为 mavenOpts
(withMaven 方法参数)并且它有效。
所有服务器,包括主服务器和从服务器、测试服务器和生产服务器,都是 CentOS 8。在这两种环境中,我都使用相同版本的 JDK 和 Maven,它们都是由 Jenkins 自动安装的。
locale
命令 returns 所有这些都一样:
LANG=pl_PL.UTF-8
LC_CTYPE="pl_PL.UTF-8"
LC_NUMERIC="pl_PL.UTF-8"
LC_TIME="pl_PL.UTF-8"
LC_COLLATE="pl_PL.UTF-8"
LC_MONETARY="pl_PL.UTF-8"
LC_MESSAGES="pl_PL.UTF-8"
LC_PAPER="pl_PL.UTF-8"
LC_NAME="pl_PL.UTF-8"
LC_ADDRESS="pl_PL.UTF-8"
LC_TELEPHONE="pl_PL.UTF-8"
LC_MEASUREMENT="pl_PL.UTF-8"
LC_IDENTIFICATION="pl_PL.UTF-8"
LC_ALL=
我注意到slave的“系统信息”页面的“环境变量”部分有些不同。在测试 Jenkins 时有更多属性。在生产 Jenkins 中没有:LANG
、LESSOPEN
、S_COLORS
.
我的问题:
- 为什么我必须在
JVM Options
中为生产 Jenkins 中的奴隶设置 file.encoding
?在 Jenkins 测试中,如果没有它,它可以正常工作。
- 为什么我必须在 withMaven 调用中设置
file.encoding
?同样,在 Jenkins 测试中没有它也能正常工作。
- 为什么 Jenkins 实例之间的环境变量存在差异?
问题是,从属服务器上的用户 jenkins homedir 中没有创建文件 .bashrc
和 .bash_profile
。创建它们并重新启动 Jenkins 后,一切正常。
我在 Jenkins 上设置编码属性时遇到问题。
在测试 Jenkins 的“系统信息”页面上,master 显示 file.encoding = UTF-8
和 sun.jnu.encoding = UTF-8
。相同的值显示在从站的“系统信息”页面上。 slave配置中的JVM Options
字段不包含-Dfile.encoding=UTF-8
,但是就像我写的一样,系统信息中的编码是可以的。当我 运行 使用 withMaven 方法在该从站上运行脚本时,在日志中有 Default locale: pl_PL, platform encoding: UTF-8
.
在 master 的生产 Jenkins“系统信息”页面上显示 file.encoding = UTF-8
和 sun.jnu.encoding = UTF-8
。但是在从站的“系统信息”页面上,两个属性的值都为 ANSI_X3.4-1968
。当我将 -Dfile.encoding=UTF-8
添加到从属配置 file.encoding = UTF-8
中的 JVM Options
字段时。在 slave 上运行相同的管道脚本放入日志文件 Default locale: en_US, platform encoding: ANSI_X3.4-1968
。我可以将 -Dfile.encoding=UTF-8
设置为 mavenOpts
(withMaven 方法参数)并且它有效。
所有服务器,包括主服务器和从服务器、测试服务器和生产服务器,都是 CentOS 8。在这两种环境中,我都使用相同版本的 JDK 和 Maven,它们都是由 Jenkins 自动安装的。
locale
命令 returns 所有这些都一样:
LANG=pl_PL.UTF-8
LC_CTYPE="pl_PL.UTF-8"
LC_NUMERIC="pl_PL.UTF-8"
LC_TIME="pl_PL.UTF-8"
LC_COLLATE="pl_PL.UTF-8"
LC_MONETARY="pl_PL.UTF-8"
LC_MESSAGES="pl_PL.UTF-8"
LC_PAPER="pl_PL.UTF-8"
LC_NAME="pl_PL.UTF-8"
LC_ADDRESS="pl_PL.UTF-8"
LC_TELEPHONE="pl_PL.UTF-8"
LC_MEASUREMENT="pl_PL.UTF-8"
LC_IDENTIFICATION="pl_PL.UTF-8"
LC_ALL=
我注意到slave的“系统信息”页面的“环境变量”部分有些不同。在测试 Jenkins 时有更多属性。在生产 Jenkins 中没有:LANG
、LESSOPEN
、S_COLORS
.
我的问题:
- 为什么我必须在
JVM Options
中为生产 Jenkins 中的奴隶设置file.encoding
?在 Jenkins 测试中,如果没有它,它可以正常工作。 - 为什么我必须在 withMaven 调用中设置
file.encoding
?同样,在 Jenkins 测试中没有它也能正常工作。 - 为什么 Jenkins 实例之间的环境变量存在差异?
问题是,从属服务器上的用户 jenkins homedir 中没有创建文件 .bashrc
和 .bash_profile
。创建它们并重新启动 Jenkins 后,一切正常。