我正在尝试构建一个包含多个 C++ .vcproj 的 VS .sln。解决方案文件是使用 CMake 生成的,我已经让这部分在 Jenkins 中工作(使用 CMake builder 插件)。为了构建解决方案文件,我使用了 msbuild。我可以使用 Visual Studio 和从命令行使用以下命令构建解决方案:
C:\Jenkins\workspace\SonioTest>"C:\Windows\Microsoft.NET\Framework\v4.0.30319\msbuild.exe" /t:Rebuild bin/SonIO.sln
这会成功构建(在 Jenkins 所在的同一台机器上)。
然而,我试图在 Jenkins 中自动化这部分构建,构建最终失败并出现几个C1083
错误 ( "Cannot open source file: '..\path\to\file.ext': No such file or directory
)。我已经尝试使用 Jenkins msbuild 插件和使用在终端中工作的完全相同的命令作为“执行 Windows 批处理命令”构建步骤,结果相同。
使用 Windows 批处理命令构建步骤时,我可以在日志中看到正在执行的命令:
C:\Jenkins\workspace\SonioTest>"C:\Windows\Microsoft.NET\Framework\v4.0.30319 msbuild.exe" /t:Rebuild bin/SonIO.sln
...与从命令行工作的完全一样,包括工作目录。
我将 Jenkins 作为服务运行,并且我将服务登录作为我的帐户(具有管理员权限)。任何人都知道Jenkins将从哪个目录执行批处理命令?
任何想法为什么我会看到 Jenkins 和命令行之间的这种行为差异?