Jenkins Pipeline 无法在 Windows 从站中执行 SH 命令文件

Jenkins Pipeline cannot execute SH command file in a Windows slave

我正在执行这段代码:

node('my_windows_slave') {
   sh 'ls'
}

在我的 Windows 奴隶中我可以正确执行 sh 命令:

但是管道脚本不能 运行 .sh 文件:

[Pipeline] sh
[D:\workspace\sandbox_pipeline] Running shell script
sh: D:\workspace\sandbox_pipeline@tmp\durable-2d7dd2f8\script.sh: command not found

我能注意到的是,这个 .sh 文件甚至没有创建,一旦我尝试使用 bat 并且工作正常。

任何线索可能是什么问题?

[更新]

Jenkins 无法创建 SH 临时文件。已经检查了日志,权限,我想到的一切。

一旦我仍然不能 100% 确定根本原因并且可能其他人会提出一个优雅的解决方案,我将在批准它之前留下我的解决方法作为答案...

def shell(command) {
    return bat(returnStdout: true, script: "sh -x -c \"${command}\"").trim()
}

关注

您仍在 CMD 中执行 SH 命令,这意味着某些 %d 可能会破坏您的 SH 命令。

使用 bat 步骤代替 sh

来自詹金斯docs

Windows-based systems should use the bat step for executing batch commands.