5

我正在尝试构建一个包含多个 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 和命令行之间的这种行为差异?

4

4 回答 4

3

这既是一种解决方案,也是一种解决方法,但我最终使用了,devenv而不是msbuild它工作正常。

我知道这强烈暗示这是一个环境问题,但由于在构建服务器上安装 VS 不是问题,我决定节省在 msbuild 兔子洞中花费的时间。

于 2013-02-11T16:52:54.670 回答
1

Without knowing much about VS build, it looks mostly like an environment setup.

My first advice would be to make sure, in Jenkins, you change directory to the same directory you ran the good command from and try it then.

Also, might want to try running Jenkins as a standalone app first.

And as a service, maybe allow service to "interact with desktop".

于 2013-02-11T14:51:34.670 回答
1

Jenkins 从代理的帐户所使用的环境与您在提示符下执行相同命令行时使用的环境不同。比较两个环境,注意区别,然后将它们添加到 Jenkins 作业中。

要在运行时获取从属设备的环境,请让它从 Windows 命令提示符执行“设置”

于 2013-02-11T23:07:14.840 回答
0

我可能迟到了,但我仍然在 Server 2016 上的新 Jenkins 设置上遇到了这个问题。

我的解决方案是直接从 VS2017 安装中使用 MSBUILD C:\Program Files (x86)\Microsoft Visual Studio\2017\BuildTools\MSBuild\15.0\Bin。没有更多的错误。

于 2018-11-05T19:33:20.860 回答