未找到单位:'System.pas' 或二进制等效项 (.dcu):在 jenkins 上编译

Unit not found: 'System.pas' or binary equivalents (.dcu) : Compiling on jenkins

我正在使用 Jenkins 为测试项目每 15 分钟生成一次自动构建。

为 Delphi 编译时本身没有问题,现在当我通过 jenkins 运行 时出现以下问题...

C:\Program Files (x86)\Embarcadero\RAD Studio.0\Bin\CodeGear.Delphi.Targets(136,3): error : Project1.dpr(1) Fatal: F1027 Unit not found: 'System.pas' or binary equivalents (.dcu)

我已经尝试过 运行 通过 windows 命令这种方式。

cd "C:\Users\carlos.santos\Desktop\teste"
call build.bat

和Build.bat这样。

call "C:\Program Files (x86)\Embarcadero\RAD Studio.0\bin\rsvars.bat"
msbuild "Project1.dproj" /p:config=Release /p:Warn=0

我已经尝试通过 Rad Studio 插件本身为 Jenkins 运行 这种方式,但它也没有用。

我已经在一些论坛上看到,如果我有很多路径或者在库路径中没有默认路径 Delphi 可能会出现问题,但我也测试过这个但没有..

这是我的路径。

$ (BDS) \ lib; $ (BDS) \ Imports; $ (BDS) \ Lib \ Indy10; $ (BDSCOMMONDIR) \ Dcp; $ (BDS) \ include; $ (BDS) \ RaveReports \ Lib; $ (BDSCOMMONDIR) \ Bpl; $(BDS)\lib\debug; $(BDS)\bin; $(DELPHI)\Bin;

rsvars.bat的内容有:

@SET BDS=C:\Program Files (x86)\Embarcadero\RAD Studio.0
@SET BDSCOMMONDIR=C:\Users\Public\Documents\RAD Studio.0
@SET FrameworkDir=C:\Windows\Microsoft.NET\Framework\v2.0.50727
@SET FrameworkVersion=v2.0.50727
@SET FrameworkSDKDir=
@SET PATH=%FrameworkDir%;%FrameworkSDKDir%;%PATH%
@SET LANGDIR=EN

我的 Delphi 中安装了第三方组件,但我不知道它是否有任何影响。谁能帮助我,将不胜感激。

jenkins 和 cmd 执行的属性之间的区别是:

已解决将参数 _EnvLibraryPath 与我的 Delphi 放在一起 msbuild 调用中的 LibraryPath 参数,示例:

call "C:\Program Files (x86)\Embarcadero\RAD Studio.0\bin\rsvars.bat"
msbuild "C:\Users\carlos.santos\Desktop\teste\Project1.dproj" /p:_EnvLibraryPath="C:\Program Files (x86)\Embarcadero\RAD Studio.0\lib\EN;C:\Program Files (x86)\Embarcadero\RAD Studio.0\lib"

同样的问题可能还有其他原因。 我刚刚经历过并解决了它。 在我的例子中,这与我除了 Release 和 Debug 之外还有另一个配置有关,即 ReleaseConsumer。 我的构建命令包括指定配置:

DoJenkinsTasks "US2D_GUI" "Config=ReleaseConsumer;Platform=Win64"

现在,我遇到了与上述相同的错误。 原因是找不到有dcu文件的ReleaseConsumer文件夹。 我通过在 c:\Program Files (x86)\Embarcadero\Studio.0\lib\win64\ 下创建一个新文件夹 releaseConsumer 并将所有 dcu 文件从 release 复制到它来解决它。

运行 msbuild 加上 /v:diagnostic 选项,你会看到设置了 none 的默认环境路径:

Initial Properties:
___ResourcePath                = 
__ObjectPath                   = 
__ResourcePath                 = 
_EnvDCPOutput                  = 
_EnvLibraryPath                = 
_EnvNamespace                  = 
_EnvPackageOutput              = 
_ObjectPath                    = 
_OutputDRCFiles                = false
_ProjectFiles                  = @(DelphiCompile)
_ResolveGENTLBBindingsTarget   = 

这是因为您缺少构建服务器上的 %APPDATA%\CodeGear 目录(在 运行 构建的用户下)。

特别是,您需要 CodeGear\BDS.0\EnvOptions.proj 设置文件,其中包含所有环境变量。 将其放置到位,您将看到 msbuild 的诊断显示如下属性:

Initial Properties:
___ResourcePath                = C:\Program Files (x86)\Embarcadero\RAD Studio.0\lib;\Imports;C:\Program Files (x86)\Embarcadero\RAD Studio.0\Imports;C:\Users\Public\Documents\RAD Studio.0\Dcp;C:\Program Files (x86)\Embarcadero\RAD Studio.0\include;C:\Program Files (x86)\Embarcadero\RAD Studio.0\lib;C:\Program Files (x86)\Embarcadero\RAD Studio.0\Lib\Indy10;