Delphi XE3 构建批处理无法使用 Hudson 或 Jenkins 运行 msbuild

标签 delphi jenkins msbuild hudson

我尝试配置 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)

感谢您的帮助。

最佳答案

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

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

解决方案:

  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

关于Delphi XE3 构建批处理无法使用 Hudson 或 Jenkins 运行 msbuild,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20506509/

相关文章:

c# - 在 32 位版本的 Windows (Teamcity) 上编译 x64

delphi - LARGE_INTEGER 还是 TLargeInteger?

delphi - 为什么包内缺少 x.dfm?

multithreading - 如何在多线程中调用递归函数

jenkins - 是否可以在管道脚本中将字符串与作业参数连接起来

hudson - 如何防止两个Jenkins项目/构建同时运行?

jenkins - 无法在Gradle项目中加载资源

delphi - 如何在其他程序中访问和读取 Label 的标题

构建无法识别的 <project> 时出现 MSBuild 错误

visual-studio - Visual Studio 向 MSBuild 传递哪些参数?