Answers:
我过去所做的就是将物理开发机器转换为VM,或者如果它已经是VM,请将其保留以备将来使用。磁盘空间使用效率不如我所希望的那样,但是空间却很便宜。而且,此过程在时间上比在将来需要时重新尝试配置环境要便宜得多。
我目前最喜欢的方法是维护一个脚本,该脚本可以安装项目所需的所有依赖项,下载源代码,然后连接所有内容。有些脚本有两种模式-一种用于生产,通常通常是另一种模式的子集:开发。
在某些环境中,使用脚本安装只需要大约5分钟的时间-在这种情况下,我会在早上上班时保留本地VM并重新安装目标操作系统,并在其中部署项目脚本,然后再进行所有编码该VM实例的相关工作。在我离开之前,我将通过git将所有更改推送到我的物理机或中央存储库,并终止VM。
如果环境需要更长的设置时间(长时间运行的安装,需要下载的大文件等等),我每周执行一次上述过程。
好处是很容易部署到新机器和/或生产服务器上,所有内容都记录在脚本中,并且脚本经常被验证。
您所描述的概念是配置管理。听起来,这是识别,记录,版本/跟踪和报告环境的一种方法。它通常是与版本控制和版本管理密切相关的任务,但是它足够独特,因此即使使用一些相同的概念以及相同的处理和存储机制,也常常需要单独的策略。
配置管理除了有助于控制工作环境外,还有助于建立使用软件的不同工作环境的记录(如上所述进行开发,加上测试/ QA,部署到常规客户,部署到需要特殊考虑或特殊配置的客户或构建属性,等等)。
正如我所说,这通常是与源代码版本控制同时进行的任务,并且配置管理数据通常位于文档和源代码存储库中靠近源代码的位置。它不是必须的,但通常是为了方便起见。
近年来,配置管理某些方面的自动化已大大改善。一些答案和注释建议使用脚本来促进配置管理,而脚本是帮助实现可重现结果的很好答案,但是通常手工制作的脚本本身往往是不一致且不完整的。这种改进的一种方式是通过自动配置。像系统木偶或厨师帮助为特定用户或机器或特定任务配置文件指定软件组件和系统,并提供“配方”,使您无需动手即可设置完整的机器或环境。它基本上采用了软件分发存储库的概念,并且对其进行了扩展和概括,不仅提供了系统所需的软件包,还提供了每个软件包特有的配置配置文件,以便可以按照适合您的方式使用情况。
Vagrant朝着略有不同的方向采取了这种做法,并提供了一种快速启动虚拟机定义的方法,从而使VM可以自动配置其虚拟软件和硬件,并且可以证明是一种方便的方式来再现硬件的特定表示形式软件用户使用的环境。
每个系统(及其变体)都需要一点时间来设置,但是如果您发现重新加载和重新配置的任务是一项常见任务,则它具有一些明确的价值。
Docker将是一个不错的选择。您可以使用dockerfile充当所需VM的清单。您不需要存储任何图像,它将下载所需的图像。而且,它可以使用自己的映像,因此您可以制作自己的基础映像,然后添加环境所需的组件。
使用docker这还可以改善工作流程的其他部分:
因此,这里有关使用VM的想法只是部分正确,我知道HDD越来越大,但这不是耗尽所有空间的理由。此外,当VM环境内部需要更多的HDD空间时,这可能会有些棘手,并且有可能需要重建一个。尽管文件大小可能不是问题,但是当您需要通过普通DSL连接通过5Go发送时,互联网速度仍然成为瓶颈。
大多数系统(语言,运行时或操作系统)都有一些标准化的软件和配置安装方式,因此请尝试使用它们。如:
然后制作安装说明,以确切说明需要安装的内容/必要的步骤:
然后,您应该能够重新创建环境,其他人也应该能够重新创建环境(如果这不是一个单独的项目,这可能很重要)。
您可能需要将必要的安装软件包存储在某个地方,或者仅包含下载说明(除非系统跟踪这些内容,例如apt-get或Maven)。这取决于您对软件包提供者的信任程度-可能不需要存储核心Debian软件包,但是对于一些小型免费软件项目,这可能是个好主意。
VM解决方案也将起作用,并且短期内可能会减少工作量(仅保留VM)。但是,我觉得此解决方案提供了更大的灵活性,例如在更改环境时。