新手区 Jenkins 控制台中文乱码。

dudu · 2017年03月07日 · 最后由 dudu 回复于 2017年03月14日 · 3348 次阅读

Job 中使用 mask-password 构建前,中文输出是正常的;使用后,中文输出乱码,求解。

共收到 2 条回复 时间 点赞

看了下这个插件,master 和 slave encoding 不一致可能会导致类似问题。

hudson/plugins/maskpasswords/MaskPasswordsOutputStream.java

// TODO: The logic relies on the default encoding, which may cause issues when master and agent have different encodings
@SuppressFBWarnings(value = "DM_DEFAULT_ENCODING", justification = "Open TODO item for wider rework")
@Override
protected void eol(byte[] bytes, int len) throws IOException {
    String line = new String(bytes, 0, len);
    if(passwordsAsPattern != null) {
        line = passwordsAsPattern.matcher(line).replaceAll(MASKED_PASSWORD);
    }
    logger.write(line.getBytes());
}

我推测的解决办法 (手头上没有测试环境模拟你的问题,我的生产环境 Jenkins encoding 为 UTF-8 的情况下没有此问题):

如果 job 是在 master 上执行, 检查 master 的 encoding 是否为 UTF-8

在Manage Jenkins - System Information中查看

  • LANG=en_US.UTF-8
    • Linux 上export LANG=en_US.UTF-8 或 Windows 上setx LANG en_US.UTF-8
  • file.encoding=UTF-8
    • java -Dfile.encoding=UTF-8 jenkins.war
如果 job 是在 slave 上执行,检查 master 和 slave 的 encoding 是否为 UTF-8
  • 同上更改 Master encoding
  • 在 slave 上设置环境变量
    • Linux 上export LANG=en_US.UTF-8 或 Windows 上setx LANG en_US.UTF-8
dudu #2 · 2017年03月14日 Author

非常感谢。是 master-slave 执行方式,不加 mask-password 插件,控制台信息正常;加的话,中文就是乱码,我按照您提供的方式确认一下试试。

需要 登录 后方可回复, 如果你还没有账号请点击这里 注册