【问题标题】:Delphi XE3 build batch failed to run msbuild using Hudson or JenkinsDelphi XE3 构建批处理无法使用 Hudson 或 Jenkins 运行 msbuild
【发布时间】:2013-12-28 16:20:04
【问题描述】:

我尝试配置 Hudson (3.1.0) 来构建 Delphi XE3 项目 (MSBuild)。

构建批次:

call "C:\Program Files (x86)\Embarcadero\RAD Studio\10.0\bin\rsvars.bat"
msbuild "X:\Tests\DelphiTest\Project1Test.dproj" /t:Build /v:minimal /p:config="Debug"

在命令行中运行此批处理 (cmd.exe) - 构建正确。

当我将此批次放入 Hudson 时,构建步骤因 delphi 编译器错误而失败:

[..]

C:\Program Files (x86)\Embarcadero\RAD Studio\10.0\bin\CodeGear.Common.Targets : warning : Expected configuration file missing - C:\Windows\system32\config\systemprofile\AppData\Roaming\Embarcadero\BDS\10.0\EnvOptions.proj
_PasCoreCompile:
    Embarcadero Delphi for Win32 compiler version 24.0
    Copyright (c) 1983,2012 Embarcadero Technologies, Inc.
C:\Program Files (x86)\Embarcadero\RAD Studio\10.0\Bin\CodeGear.Delphi.Targets(172,5): error E1026: File not found: 'Controls.res'

[..]

事实上,我在这个位置没有丢失文件。但我在
C:\Users\<username>\AppData\Roaming\Embarcadero\BDS\10.0

中找到了它

所以我尝试做一些假想,比如将现有目录复制到丢失的位置,但它不起作用。

我正在使用:Delphi XE3 Enterprise,Win 7 Ultimate (x64)

感谢您的帮助。

【问题讨论】:

  • 不了解 Hudson,但无论 XE3 版本的 CodeGear.Common.Targets 是 <Import Project="$(APPDATA)\borland\$(BDSAppDataBaseDir)\5.0\EnvOptions.proj" , Condition="Exists('$(APPDATA)\borland\$(BDSAppDataBaseDir)\5.0\EnvOptions.proj')"/>,MSBUILD 都应该扩展 APPDATA 环境变量,因此您需要让 Hudson 正确设置它以任何用户身份登录。
  • <EnvOptions>$(APPDATA)\Embarcadero\$(BDSAppDataBaseDir)\$(ProductVersion)\EnvOptions.proj</EnvOptions>
  • @GerryColl 我应该在哪里添加这个 ,一些 Hudson 配置文件?
  • 最后我使用有问题的提示解决了问题stackoverflow.com/questions/5735241/… 我已经更改了登录 Hudson windows servis 的用户。现在,一切都很好。我知道这是一个中间解决方案,但对我和我的环境来说都很好。感谢您的帮助!
  • FWIW:EnvOptions 标记位于 CodeGear.Common.Targets 中,该标记位于 Delphi/Rad Studio bin 文件夹中。它是一个 MSBuild“目标”文件,它告诉 MSBuild 在哪里可以找到其他信息。

标签: delphi jenkins msbuild hudson


【解决方案1】:

这通常发生在您第一次运行 MSBUILDDCC32 在从未打开过 IDE gui (bds.exe) 并且已通过 BDS.exe 中发生的强制启动环境配置任务的机器上时.

如果您使用从未用于 Windows 登录、从未运行过 BDS.exe 的帐户作为 Windows 服务登录 Hudson 或 Jenkins,您将遇到此问题。 Microsoft 的MSBUILD 实用程序必须调用DCC32,这是许可的商业软件,而Delphi 命令行编译许可和环境配置要求您已将IDE 作为帐户运行,并且您的jenkins build 帐户和计算机已获得正确许可。

解决方案:

  1. 将 Jenkins 或 Hudson 更改为具有运行 Delphi 的许可且至少运行过一次 Delphi 的帐户登录。

  2. 如果您无法更改服务器登录,则使用 Jenkins/Hudson 正在使用的帐户以交互方式登录(通过远程桌面),并配置 Delphi (Rad Studio) 以便从该帐户正常运行。

2015 年更新:我现在遇到了与组托管服务帐户相关的全新一类问题。他们正在使用 Delphi XE8,但我无法获得 GMSA 帐户来使用 Delphi 10 Seattle。如果我真的想出办法,我会更新这个答案,但现在,我推荐传统的服务帐户,而不是 GMSA,用于 Delphi 与 Jenkins 或 Continua 或其他人的持续集成。另请查看 Delphi.wikia.com 以获取更多提示:http://delphi.wikia.com/wiki/Setting_up_a_Delphi_Build_Machine

【讨论】:

  • 当构建服务帐户没有交互式登录权限时(这在各种公司环境中是强制性的),这将不起作用。对于 Win32 和 Win64 目标,您通常可以将目录放在 DelphiLibraryPath 中就足够了。见github.com/jpluimers/Conferences/blob/master/2014/…
  • 很高兴知道这一点。我还手动配置了服务帐户,方法是找到他们的配置文件目录并通过将内容从c:\users\someuser 复制到全局系统/服务配置文件目录来手动设置它们。
【解决方案2】:

我们最近遇到了类似的问题。我们正在尝试在 jenkins 上编译我们的项目。我们将“构建”脚本简化为以下 2 行

call "[....]Embarcadero\Studio\18.0\bin\rsvars.bat"
MSBuild.exe /p:config=Release /target:Rebuild  Project2.dproj

这是成功构建项目。

但是当我们切换到 /p:config=debug 时,构建会失败,并会出现关于丢失 *.res 文件的已知错误。我们在delphi lib/win32/目录中查找,发现release文件夹中有*.res文件,而debug文件夹中没有。我们现在将 msbuild 命令进一步修改为:

MSBuild.exe /p:config=Release /target:Rebuild /p:ResourcePath="%BDS%\lib\win32\release" Project2.dproj

这编译得很好。因此,显然在调试模式下编译缺少 delphi 源的路径(包含在 %BDS%\source\

的几个子文件夹中

因此,作为一种解决方法,我们可以使用 jenkins 编译调试版本,并简单地为 delphi 提供其发布文件夹中的 *.res 文件。但这只能是一个中间解决方案。

也许此信息可以帮助某人找到不是“将 %BDS%\source 的所有子文件夹添加到搜索路径中”的最终解决方案;-)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-01-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多