Jenkins控制台中文乱码&globby无法查找到带空格目录的正则表达式

520 阅读2分钟

开启掘金成长之旅!这是我参与「掘金日新计划 · 12 月更文挑战」的第13天,点击查看活动详情

globby的一个bug

我使用的是11.0.0,目录下边是有一个txt的

const ret = globby.sync('D:/Program Files (x86)/1/*.txt');
console.log(ret)

结果找不到,追查底层代码,发现是正则匹配出现了问题,如果目录中出现一个空格是能够正常工作的,但是如果多次出现空格,就无法正常工作,也懒得想怎么修复这个问题了

globby还有一个问题,目录分割必须是/,Windows的\也会导致无法正常工作

也有可能跟我使用的globby的版本有一定的关系,因为很久之前一直使用这个package,并没有发现这个问题,当时都会尽量避免空格中文字符的路径,可能绕过了这个问题,直接换glob,一切正常!

Jenkins控制台中文乱码

image.png

解决办法

  1. Manage Jenkins/Configure System

image.png

  • LANG
  • zh.CN.UTF-8

image.png

  1. 配置Windows系统的环境变量
  • 键:JAVA_TOOL_OPTIONS
  • 值:-Dfile.encoding=UTF-8

image.png

  1. 修改Jenkins.xmlarguments中添加-Difile.encoding=utf-8

image.png 4. 配置从节点

  • Manage Jenkins/Manage Nodes and Clouds image.png image.png
  1. 重启Jenkins服务,登录管理员账号,输入url: JenkinsURL/restart

image.png

如果一切顺利的话,控制台就会正常显示中文了,这里仅仅是修改了Jenkins的输出编码,如果脚本中的编码异常,还需要修改脚本的。

nodejs脚本中修改

使用nodejs的spawn的话,默认返回的就是utf8格式,而在本地测试的时候,控制台是gbk,只需要转码就行了

设置下调试的环境变量

{
  "version": "0.2.0",
  "configurations": [
    {
      "type": "node",
      "request": "launch",
      "name": "Launch Program",
      "preLaunchTask": "npm: only-build",
      "program": "${workspaceFolder}/dist/index.js",
      "skipFiles": ["<node_internals>/**"],
      "env": {
        "vscode": "true"
      }
    }
  ]
}

通过环境变量区分是否需要转码

import { decode, encode } from "iconv-lite";

if (process.env.vscode) {
  console.log(decode(str, "gbk"));
} else {
  console.log(str.toString());
}