Jenkinsfile中sh命令未执行git diff写入文件问题求助
问题原因及解决办法
核心原因
你遇到的问题源于Groovy字符串解析与shell命令执行的冲突:
- 用双引号包裹
sh命令时,Groovy会优先对$WORKSPACE做变量插值,如果$WORKSPACE路径包含空格或特殊字符,会导致shell错误解析命令——把重定向符号>当成git diff的参数,而非执行输出重定向操作。 - 若你代码中误加了
echo(比如写成sh "echo git diff requirements.txt > ..."),也会直接把命令字符串写入文件,但根据你提供的代码,前者是更常见的诱因。
解决办法
方法1:用单引号包裹shell命令
让shell自行处理环境变量和重定向,避免Groovy插值干扰:
sh 'git diff requirements.txt > $WORKSPACE/requirements-diff.txt'
注:$WORKSPACE本身就是Jenkins暴露给shell的环境变量,无需Groovy插值。
方法2:双引号下给路径加转义引号
如果必须用Groovy插值其他变量,给路径加转义双引号,确保shell正确识别重定向逻辑:
sh "git diff requirements.txt > \"$WORKSPACE/requirements-diff.txt\""
额外提示
检查文件名拼写:你代码里写的是requirements-diff.tx(少了一个t),建议修正为requirements-diff.txt,避免后续出现文件找不到的问题。
内容的提问来源于stack exchange,提问作者kahhengchong
相关产品推荐
相关产品推荐

