> 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 个思路:
去掉 Jenkins Job 里脚本和指令中的中文等字符
让 Jenkins 的运行环境支持 UTF-8 编码,以正常处理和展示中文内容
我比较偷懒,选了第一种,这里我贴下另外一个帖子中让Jenkins支持UTF-8编码的方式
让 Jenkins 正确处理和展示中文,有 2 个方法,可以根据自身情况进行设置:
设置机器的 LANG=”C.UTF-8”
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 的环境变量:
检查 LANG 的值,查看下是否为 C.UTF-8 ;
或者,查看 JENKINS_JAVA_OPTS 或者 JAVA_OPTS 的值里是否有
-Dfile.encoding=UTF8
;最后,运行一下之前 Job 的构建任务,看看能否正常显示中文和正常完成构建。