【问题标题】:In continuous integration what is the best way to deal with external application dependencies在持续集成中,处理外部应用程序依赖关系的最佳方法是什么
【发布时间】:2010-09-12 07:03:20
【问题描述】:
在使用我们的 TeamCity 持续集成服务器时,我们发现了一些我们不确定最佳处理方式的问题。即如何在 CI 服务器上引用我们的应用程序需要的外部应用程序。
最初发现这依赖于 Crystal Reports,因此我们在服务器上安装了 Crystal Reports,以解决当前的问题。然而,随着我们将更多的应用程序转移到 CI 服务器上,我们发现了更多的依赖关系。
这里最好的策略是什么?是否继续在服务器上安装所需的应用程序?
谢谢
【问题讨论】:
标签:
continuous-integration
dependencies
teamcity
【解决方案1】:
如果您的构建需要实际的应用程序来完成构建,那么您可能应该继续在您的构建服务器上安装该应用程序。
如果您只需要引用应用程序中的 dll 或程序集,那么我们在我公司所做的是创建特定应用程序所需引用的可安装“SDK”,并将它们安装在我们的开发和构建机器上我们的解决方案引用的知名库目录。
在构建机器上,我们的预构建步骤会安装正确版本的依赖项,然后在完成后清理它们。
最近,我们开始将虚拟机用于构建过程激活的构建机器。这些 VM 将 SDK 作为预构建安装在其上,然后在构建后恢复到它们的快照状态。我们有一些几乎不可能卸载的依赖项,因此每次都是一个干净的起点。
【解决方案2】:
在可能的情况下,将外部依赖项作为构建系统的一部分。
例如,将安装程序签入您的版本控制系统,并有一个步骤将其签出并在静默模式下运行(许多安装程序支持有时使用命令行 /s 无需用户操作的模式)。
这样,如果您需要为分支或只是为新硬件设置另一台构建机器,一切都是可重复的。
【解决方案3】:
我不确定我是否正确地遵循...
我假设您的应用程序在构建时依赖于这个外部应用程序?在那种情况下,它应该在机器上做 CI...
【解决方案4】:
如果你使用 Maven 构建,你可以在 pom.xml 文件中定义你的依赖。如有必要,它们将被自动下载。