【发布时间】:2015-10-30 18:32:48
【问题描述】:
我们正在考虑将我们的构建机器从 FinalBuilder 迁移到 Jenkins,以适应我们扩展公司的其他部分。
我注意到的一个问题是,虽然 Finalbuilder 能够从构建机器上当前安装的 Delphi 中提取当前库路径,但 Jenkins 依赖于 .dproj 文件中包含的信息。
由于 .dproj 文件中的路径非常特定于用户机器的已知问题,我们目前没有将它们提交到我们的存储库,而是依靠 Delphi 根据需要重新创建它们。当构建机器首先依赖于完整的 MSBUILD 脚本时,这显然不会很好。
我们使用了相当多的第三方组件(仅 DevExpress 套件就有 100 多个单元),因此在 .dpr 中包含和维护所有具有完整路径的 .pas 文件并不是一个真正的选择。
有没有人对此有一个久经考验的解决方案?
我对选项的想法是:
- 为每个构建设置 %PATH% - 添加当前的 Delphi 库 对于相关版本(这会遇到 %PATH% 长度限制吗?)
- 使用命令行参数将正确的库路径传递给 MSBUILD(这可能吗?)
- 使用编译器指令在源文件中以某种方式包含搜索路径(这可能吗?)
- 使用预编译步骤创建新的 .dproj 文件(类似于 http://delphi-divining.blogspot.co.uk/2012/10/dprojmaker-tool-to-create-delphi.html,但需要命令行)
编辑:第五个想法:
- 我们能否为每个项目使用 dproj.local 文件,存储在单独的存储库(或单独的路径)中并在预构建时复制到构建机器?这将允许构建机器路径安全地存储,远离混乱的提交。
【问题讨论】:
-
将所有第三方库放入项目中,vcs repo 就是答案。无法想象您为什么要回避可重现的构建。为什么要问版本地狱?