【问题标题】:Msbuild works via VS and command-line, but fails via JenkinsMsbuild 通过 VS 和命令行工作,但通过 Jenkins 失败
【发布时间】: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% 确定你的意思。

标签: windows msbuild jenkins


【解决方案1】:

在不太了解 VS 构建的情况下,它看起来更像是一个环境设置。

我的第一个建议是确保在 Jenkins 中将目录更改为运行好命令的同一目录,然后尝试。

另外,可能想先尝试将 Jenkins 作为独立应用程序运行。

作为一项服务,也许允许服务“与桌面交互”。

【讨论】:

  • 我已验证它与成功的非 Jenkins 命令在同一工作目录中运行(请参阅我的编辑)。 “与桌面交互”复选框显示为灰色,因为我指定了自己的(管理员)用户帐户。
  • 您是否尝试过将 Jenkins 作为进程而不是作为服务运行?
【解决方案2】:

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

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

【讨论】:

    【解决方案3】:

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

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

    【讨论】:

    • 我这样做了(在切换到 devenv 之前),Jenkins 从属环境几乎(不完全)是我的命令行环境的超集。我仔细检查了与编译(VC ...)有关的变量,它们几乎相同,詹金斯奴隶有一些额外的。感谢您的帮助,但除非我有令人信服的理由从 devenv.exe 切换,否则我宁愿不花更多时间进行调查。
    【解决方案4】:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-02-18
      • 2022-01-18
      • 1970-01-01
      • 2013-04-13
      • 2023-04-09
      • 1970-01-01
      • 2020-09-09
      相关资源
      最近更新 更多