Continuous integration 存储库应该包含什么?

Continuous integration 存储库应该包含什么?,continuous-integration,Continuous Integration,我试图建立一个持续的整合过程。对于我的各种构建任务(编译、测试、文档等),我需要有执行这些任务的工具(csc、NUnit、NDoc等)。我的问题是这些工具是否也应该进入我的源代码管理存储库 我之所以认为他们应该这样做,是因为我在一些在线文章中读到,开发人员环境应该与构建服务器环境非常相似。为了满足这一要求,文章建议您将构建所需的所有内容都放在存储库中,当您签出代码(或构建服务器签出代码)时,就可以立即构建项目,而无需先安装任何其他工具。但另一方面,如果我将这些工具和源代码放在存储库中,那么无论何

我试图建立一个持续的整合过程。对于我的各种构建任务(编译、测试、文档等),我需要有执行这些任务的工具(csc、NUnit、NDoc等)。我的问题是这些工具是否也应该进入我的源代码管理存储库

我之所以认为他们应该这样做,是因为我在一些在线文章中读到,开发人员环境应该与构建服务器环境非常相似。为了满足这一要求,文章建议您将构建所需的所有内容都放在存储库中,当您签出代码(或构建服务器签出代码)时,就可以立即构建项目,而无需先安装任何其他工具。但另一方面,如果我将这些工具和源代码放在存储库中,那么无论何时运行构建,构建服务器都必须安装它们


安装这些工具可以吗?它不会不必要地增加每个构建的时间吗?

除非您自定义工具,否则可能没有理由将其源代码放入存储库中。但是,将配置文件放入存储库有很好的理由。

除非您自定义工具,否则可能没有理由将其源代码放入存储库。但是,将配置文件放入存储库有很好的理由。

将工具签入到源代码管理中通常会遇到很多麻烦。相反,写一个软件需求列表,在源代码被签出和构建之前必须安装这些软件需求(在任何情况下都需要在这个列表上的一件事情是源代码控制系统本身)。如果您依赖于源代码管理中的软件,则可能需要在某些路径中安装某些工具或以其他方式进行配置(我想到的是注册表项)


我当然不会将编译器本身签入到源代码控制中,而且我可能也不会签入NUnit或NDoc。只需事先安装这些,因为它们在项目生命周期内不太可能发生太多变化。您的生成脚本可能希望在继续生成之前检查所需软件包的预期版本是否已安装。

尝试将工具签入到源代码管理中通常会遇到更多麻烦。相反,写一个软件需求列表,在源代码被签出和构建之前必须安装这些软件需求(在任何情况下都需要在这个列表上的一件事情是源代码控制系统本身)。如果您依赖于源代码管理中的软件,则可能需要在某些路径中安装某些工具或以其他方式进行配置(我想到的是注册表项)


我当然不会将编译器本身签入到源代码控制中,而且我可能也不会签入NUnit或NDoc。只需事先安装这些,因为它们在项目生命周期内不太可能发生太多变化。您的生成脚本可能需要检查所需软件包的预期版本是否已安装,然后才能继续生成。

为每个生成重新安装工具是一种过度操作,会降低您的速度

但是,最好有一个专门用于持续集成的服务器,以便您了解其状态;您确定没有人安装任何可能影响生成结果的内容

如果您希望能够在明年重新生成今天的构建,那么首先需要能够重新创建您的环境。通过将工具保留在服务器上(在不同目录中安装较新版本),或将整个软件包存储在配置管理工具中,确保能够重新安装工具(完全相同的版本)

考虑一下如何创建另一个持续集成服务器,或者创建两个,或者创建第二个站点,或者在灾难发生后进行恢复记录如何设置持续集成服务器


真正需要版本控制的是构建脚本,它可以访问正确版本的工具,特别是如果您选择安装多个版本的工具

为每一个版本重新安装工具是一种过分的做法,会降低您的速度

但是,最好有一个专门用于持续集成的服务器,以便您了解其状态;您确定没有人安装任何可能影响生成结果的内容

如果您希望能够在明年重新生成今天的构建,那么首先需要能够重新创建您的环境。通过将工具保留在服务器上(在不同目录中安装较新版本),或将整个软件包存储在配置管理工具中,确保能够重新安装工具(完全相同的版本)

考虑一下如何创建另一个持续集成服务器,或者创建两个,或者创建第二个站点,或者在灾难发生后进行恢复记录如何设置持续集成服务器

真正需要版本控制的是构建脚本,它可以访问正确版本的工具,特别是如果您选择安装多个版本的工具