在 cmd 与 Jenkins 管道中运行 C# 脚本会给出不同的结果。
我正在运行 Jenkins 管道,在后期步骤中,我想从服务器获取管道日志,将其拆分为不同的文件(每个阶段一个)并将其上传到某个共享驱动器。这一切都是通过 C# 脚本完成的,下面是给出错误的代码片段:
if (File.Exists(logPath))
{
// copies the log file to current directory to avoid "file in use" error
string destPath = Directory.GetCurrentDirectory() + "/log.txt";
File.Copy(logPath, destPath, true);
m_priv_logPath = destPath;
}
else
{
throw new Exception("File \"" + logPath + "\" does not exist");
}
从命令行使用完全相同的参数运行相同的脚本可以正常运行,但在 Jenkins 中它会进入 else 块,因为 File.Exists 返回 false。 日志路径始终是网络路径,因此类似于
\\<machine-name>\<job-name>\jobs\builds\<build-number>\log
我不确定如何调试此问题或可能导致此问题的原因。有什么想法吗?
您的 Jenkins 实例可能在与您不同的用户下运行。该用户可能没有相同的权限来访问相关网络路径。将此命令添加到您的管道中以查看 Jenkins 是否可以访问该文件:
bat '\\\\<machine-name>\\<job-name>\\jobs\\builds\\<build-number>\\log'
注意,我加倍了
\
,因为 Groovy。