在 Jenkins 系统和 Jenkins 的构建中正确 file.encoding

Proper file.encoding in Jenkins system and in Jenkins' builds

我在 Jenkins 上设置编码属性时遇到问题。

在测试 Jenkins 的“系统信息”页面上,master 显示 file.encoding = UTF-8sun.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-8sun.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 中没有:LANGLESSOPENS_COLORS.

我的问题:

  1. 为什么我必须在 JVM Options 中为生产 Jenkins 中的奴隶设置 file.encoding?在 Jenkins 测试中,如果没有它,它可以正常工作。
  2. 为什么我必须在 withMaven 调用中设置 file.encoding?同样,在 Jenkins 测试中没有它也能正常工作。
  3. 为什么 Jenkins 实例之间的环境变量存在差异?

问题是,从属服务器上的用户 jenkins homedir 中没有创建文件 .bashrc.bash_profile。创建它们并重新启动 Jenkins 后,一切正常。