【发布时间】:2013-01-26 16:21:47
【问题描述】:
我正在尝试构建一个包含多个 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 和命令行之间的这种行为差异?
【问题讨论】:
-
我认为您必须使用 %WORKSPACE% 之类的占位符来指定解决方案的绝对路径
-
我已经验证该命令是由 Jenkins 从同一个工作目录运行的。你的评论还适用吗?我不是 100% 确定你的意思。