Continuous integration 在持续集成中,处理外部应用程序依赖关系的最佳方法是什么

Continuous integration 在持续集成中,处理外部应用程序依赖关系的最佳方法是什么,continuous-integration,dependencies,teamcity,Continuous Integration,Dependencies,Teamcity,在使用TeamCity Continuous Integration server时,我们发现了一些我们无法确定最佳处理方式的问题。即如何引用我们的应用程序在CI服务器上所需的外部应用程序 这最初是由于依赖Crystal Reports而被发现的,因此我们在服务器上安装了Crystal Reports,以解决当前的问题。但是,当我们将更多的应用程序移到CI服务器时,我们会发现更多的依赖项 这里最好的策略是什么?是否继续在服务器上安装所需的应用程序 谢谢如果您使用Maven构建,您可以在pom.x

在使用TeamCity Continuous Integration server时,我们发现了一些我们无法确定最佳处理方式的问题。即如何引用我们的应用程序在CI服务器上所需的外部应用程序

这最初是由于依赖Crystal Reports而被发现的,因此我们在服务器上安装了Crystal Reports,以解决当前的问题。但是,当我们将更多的应用程序移到CI服务器时,我们会发现更多的依赖项

这里最好的策略是什么?是否继续在服务器上安装所需的应用程序


谢谢

如果您使用Maven构建,您可以在pom.xml文件中定义依赖项。如果需要,它们将被自动下载。

如果使用Maven构建,您可以在pom.xml文件中定义依赖项。如果有必要,它们将被自动下载。

我不确定我是否正确地遵循了


我假设您的应用程序在构建时依赖于此外部应用程序?在这种情况下,它应该在机器上做CI

我不确定我是否正确地遵循了


我假设您的应用程序在构建时依赖于此外部应用程序?在这种情况下,它应该在机器上做CI

尽可能将外部依赖项作为构建系统的一部分。 例如,将安装程序签入到版本控制系统中,并有一个步骤将其签出并在静默模式下运行(许多安装程序支持无用户操作的模式,有时使用命令行)


这样,如果您需要为分支或新硬件设置另一台生成计算机,一切都是可重复的。

在可能的情况下,将外部依赖项作为生成系统的一部分。 例如,将安装程序签入到版本控制系统中,并有一个步骤将其签出并在静默模式下运行(许多安装程序支持无用户操作的模式,有时使用命令行)


这样,如果您需要为分支或新硬件设置另一台生成计算机,那么一切都是可重复的。

如果您的生成需要实际的应用程序来完成生成,那么您可能应该继续在生成服务器上安装该应用程序

如果您只需要从应用程序中引用DLL或程序集,那么我们在我的公司所做的就是创建特定应用程序中所需引用的可安装的“SDK”,并将它们安装在我们的开发和构建机器上,这些机器位于我们的解决方案所引用的知名库目录中

在构建机器上,我们的预构建步骤将安装正确版本的依赖项,然后在完成后清除它们


最近,我们已经将虚拟机用于构建过程激活的构建机器。这些虚拟机将SDK作为预构建安装在其上,然后在构建后恢复到快照状态。我们有一些几乎无法卸载的依赖项,因此每次都有一个干净的起点。

如果您的构建需要实际的应用程序来完成构建,那么您可能应该继续在构建服务器上安装该应用程序

如果您只需要从应用程序中引用DLL或程序集,那么我们在我的公司所做的就是创建特定应用程序中所需引用的可安装的“SDK”,并将它们安装在我们的开发和构建机器上,这些机器位于我们的解决方案所引用的知名库目录中

在构建机器上,我们的预构建步骤将安装正确版本的依赖项,然后在完成后清除它们

最近,我们已经将虚拟机用于构建过程激活的构建机器。这些虚拟机将SDK作为预构建安装在其上,然后在构建后恢复到快照状态。我们有一些几乎不可能卸载的依赖项,因此每次都有一个干净的起点