管理员
管理员
发布于 2024-05-30 / 85 阅读 / 0 评论 / 0 点赞

Jenkins 运行任务时报 FATAL: Unable to produce a script file

> git rev-parse refs/remotes/origin/master^{commit} # timeout=10
Checking out Revision bd182eb900daadc3d46bf16b47a6c4397b7d6c23 (refs/remotes/origin/master)
 > git config core.sparsecheckout # timeout=10
 > git checkout -f bd182eb900daadc3d46bf16b47a6c4397b7d6c23 # timeout=10
Commit message: "add index.html."
 > git rev-list --no-walk bd182eb900daadc3d46bf16b47a6c4397b7d6c23 # timeout=10
FATAL: Unable to produce a script file
Also:   hudson.remoting.Channel$CallSiteStackTrace: Remote call to tc-node
		at hudson.remoting.Channel.attachCallSiteStackTrace(Channel.java:1784)
		at hudson.remoting.UserRequest$ExceptionResponse.retrieve(UserRequest.java:356)
		at hudson.remoting.Channel.call(Channel.java:1000)
		at hudson.FilePath.act(FilePath.java:1192)
省略....

网上说了很多方案,有磁盘空间不足的,有文件夹权限不够的,最终经过排查是因为Jenkins的任务中shell脚本内容中包含了中文导致, 如下示例

echo "开始编译"

....其它配置
echo "结束编译"

既然是字符集(文件编码)相关的问题,解决方案有 2 个思路:

  1. 去掉 Jenkins Job 里脚本和指令中的中文等字符

  2. 让 Jenkins 的运行环境支持 UTF-8 编码,以正常处理和展示中文内容

我比较偷懒,选了第一种,这里我贴下另外一个帖子中让Jenkins支持UTF-8编码的方式


让 Jenkins 正确处理和展示中文,有 2 个方法,可以根据自身情况进行设置:

  1. 设置机器的 LANG=”C.UTF-8”

  2. ENKINS_JAVA_OPTS 或者 JAVA_OPTS 的值增加 -Dfile.encoding=UTF8 的内容

这里推荐修改 LANG 的值来支持中文:

由于我使用 Docker 方式安装的 Jenkins,所以只需要在创建 container 时设置 -e LANG="C.UTF-8" 即可;如何你使用 portainer 或者 Docker Compose,可自行查找设置、修改环境变量的方法。

对于 ENKINS_JAVA_OPTS 或者 JAVA_OPTS 的值增加 -Dfile.encoding=UTF8 的内容:

注意一点,ENKINS_JAVA_OPTS 只影响 Jenkins 程序;JAVA_OPTS 则会影响所有本机器下所有基于 Java 运行的程序。 至于修改方式,参考上面修改 LANG 的过程。

最后,对修改是否生效进行检查:

设置完毕并重启 Jenkins 后,如果你是管理员,进入 Dashboard-系统管理-系统信息-环境变量 查看下当前 Jenkins 的环境变量:

  1. 检查 LANG 的值,查看下是否为 C.UTF-8 ;

  2. 或者,查看 JENKINS_JAVA_OPTS 或者 JAVA_OPTS 的值里是否有 -Dfile.encoding=UTF8

  3. 最后,运行一下之前 Job 的构建任务,看看能否正常显示中文和正常完成构建。


参考文献:https://cloud.tencent.com/developer/article/2245164


评论