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

时间:2020-03-06 14:35:08  来源:igfitidea点击:

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

最初是依靠对Crystal Reports的依赖而发现的,因此我们去了并在服务器上安装了Crystal Reports,以解决当前的问题。但是,随着我们将更多的应用程序移至CI服务器,我们发现了更多的依赖关系。

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

谢谢

解决方案

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

我不确定我是否正确遵循...

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

尽可能使外部依赖项成为构建系统的一部分。
例如,将安装程序签入版本控制系统,并执行一个步骤来将其签出并以静默方式运行(许多安装程序支持某种模式,有时无需使用命令行/ s即可执行任何用户操作)。

这样,如果我们需要为分支机构设置另一个构建机器,或者仅为新硬件设置一切,都是可重复的。

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

如果我们只需要引用应用程序中的dll或者程序集,那么我们公司所做的就是创建特定应用程序所需引用的可安装" SDK",并将其安装在我们的开发中并以众所周知的方式构建计算机我们的解决方案引用的库目录。

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

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