1

我目前在与 Jenkins 结合使用 UTF8 时遇到问题。我们的项目是用 PHP 构建的,我们使用 Ubuntu 服务器作为服务器。

现在是编码无法正常工作的问题。我们在不同的环境中一切正常,但只有我们的詹金斯服务器出现故障。

为了测试这一点,我在单元测试中做了一些测试输出。这让我运行并读取输出。这是脚本和响应:

<?php

$str = 'téëst';
var_dump(
array(
    mb_http_input(),
    mb_http_output(),
    mb_detect_order(),
    utf8_decode($str),
    utf8_decode(utf8_decode($str)),
    utf8_encode($str),
    utf8_encode(utf8_encode($str)),
    $str,
    mb_detect_encoding($str)
)
);
?>

这是我们的直播环境/暂存环境和开发环境:

array(9) {
  [0] =>
    bool(false)
  [1] =>
    string(4) "pass"
  [2] =>
    array(2) {
      [0] =>
        string(5) "ASCII"
      [1] =>
        string(5) "UTF-8"
    }
  [3] =>
    string(5) "t��st"
  [4] =>
    string(5) "t??st"
  [5] =>
    string(11) "téëst"
  [6] =>
    string(19) "téëst"
  [7] =>
    string(7) "téëst"
  [8] =>
    string(5) "UTF-8"
}

如您所见,可以正常使用字符串,无需转换。但现在在 Jenkins 环境中,它与我们的开发环境在同一台计算机上运行,​​一切正常。

这是它的结果:

 [exec] array(9) {
 [exec]   [0] =>
 [exec]   bool(false)
 [exec]   [1] =>
 [exec]   string(4) "pass"
 [exec]   [2] =>
 [exec]   array(2) {
 [exec]     [0] =>
 [exec]     string(5) "ASCII"
 [exec]     [1] =>
 [exec]     string(5) "UTF-8"
 [exec]   }
 [exec]   [3] =>
 [exec]   string(5) "t??st"
 [exec]   [4] =>
 [exec]   string(5) "t??st"
 [exec]   [5] =>
 [exec]   string(11) "t????????st"
 [exec]   [6] =>
 [exec]   string(19) "t????????????????st"
 [exec]   [7] =>
 [exec]   string(7) "t????st"
 [exec]   [8] =>
 [exec]   string(5) "UTF-8"
 [exec] }

如上所示,所有编码选项都失败了,正常的字符串也是如此。

我已经尝试过不同的东西,例如:

  • 将 pom.xml 文件中的编码更改为 UTF-8。
  • 将 JAVA_ARGS 更改为: JAVA_ARGS="-Dfile.encoding=UTF-8"
  • 添加 JAVA_TOOL_OPTIONS="-Dfile.encoding=UTF8"
  • 添加 JENKINS_TOOL_OPTIONS="-Dfile.encoding=UTF8"
  • 添加 JENKINS_ARGS="-Dfile.encoding=UTF8 ...."

这些选项都不起作用。我已经运行了测试,也以我们的 jenkins 用户身份登录,以验证它是否是他的工作空间,但也不是。

有人可以帮助我朝好的方向发展吗?只有这在我们和 CI 开发之间。

提前致谢。

4

1 回答 1

0

我们发现 Jenkins 编码是正确的。MySQL 数据库的编码很糟糕。很遗憾。

于 2014-07-22T20:11:47.973 回答