使过去的项目保持其工作开发环境的有效方法?


19

我发现,每当我想运行一个过去的项目时,要花很长时间才能找到它,并且要重新设置一切才能运行它。

例如,我有在Linux中创建的python项目,它依赖于可轻松在Linux中安装的软件包,但是我不再拥有正在使用的Linux VM。我的其他一些项目依赖于其他变量,例如Web服务器配置,PATH变量,SDK,IDE,OS版本,设备等。

有人有解决此问题的有效方法吗?到目前为止,我只关心备份源代码,但是很难重建工作开发环境,也很难保持工作开发环境


6
NSA是我的备份
Steffe

Answers:


17

我过去所做的就是将物理开发机器转换为VM,或者如果它已经是VM,请将其保留以备将来使用。磁盘空间使用效率不如我所希望的那样,但是空间却很便宜。而且,此过程在时间上比在将来需要时重新尝试配置环境要便宜得多。


2
我认为您还需要保留所有软件/版本的副本,并通过脚本安装项目。每次都能快速重现安装,这是向前迈出的一大步。
tzerb 2013年

这是我过去所做的……非常适合支持不同的客户端环境等。如果使用基本VM,则每个后续VM都可以只是一个diff文件,如果它是一个diff文件,则可以节省磁盘空间。问题...但是我个人认为硬盘很便宜。:-)
davewasthere 2013年

随着对LXC的支持越来越好,在处理Linux环境时可以安全地使用它而不是VM。它对资源的需求减少了很多,而且速度更快。ATM管理它们的最佳工具是泊坞窗
karka91

11

我目前最喜欢的方法是维护一个脚本,该脚本可以安装项目所需的所有依赖项,下载源代码,然后连接所有内容。有些脚本有两种模式-一种用于生产,通常通常是另一种模式的子集:开发。

在某些环境中,使用脚本安装只需要大约5分钟的时间-在这种情况下,我会在早上上班时保留本地VM并重新安装目标操作系统,并在其中部署项目脚本,然后再进行所有编码该VM实例的相关工作。在我离开之前,我将通过git将所有更改推送到我的物理机或中央存储库,并终止VM。

如果环境需要更长的设置时间(长时间运行的安装,需要下载的大文件等等),我每周执行一次上述过程。

好处是很容易部署到新机器和/或生产服务器上,所有内容都记录在脚本中,并且脚本经常被验证。


4

您所描述的概念是配置管理。听起来,这是识别,记录,版本/跟踪和报告环境的一种方法。它通常是与版本控制和版本管理密切相关的任务,但是它足够独特,因此即使使用一些相同的概念以及相同的处理和存储机制,也常常需要单独的策略。

配置管理除了有助于控制工作环境外,还有助于建立使用软件的不同工作环境的记录(如上所述进行开发,加上测试/ QA,部署到常规客户,部署到需要特殊考虑或特殊配置的客户或构建属性,等等)。

正如我所说,这通常是与源代码版本控制同时进行的任务,并且配置管理数据通常位于文档和源代码存储库中靠近源代码的位置。它不是必须的,但通常是为了方便起见。

近年来,配置管理某些方面的自动化已大大改善。一些答案和注释建议使用脚本来促进配置管理,而脚本是帮助实现可重现结果的很好答案,但是通常手工制作的脚本本身往往是不一致且不完整的。这种改进的一种方式是通过自动配置。像系统木偶厨师帮助为特定用户或机器或特定任务配置文件指定软件组件和系统,并提供“配方”,使您无需动手即可设置完整的机器或环境。它基本上采用了软件分发存储库的概念,并且对其进行了扩展和概括,不仅提供了系统所需的软件包,还提供了每个软件包特有的配置配置文件,以便可以按照适合您的方式使用情况。

Vagrant朝着略有不同的方向采取了这种做法,并提供了一种快速启动虚拟机定义的方法,从而使VM可以自动配置其虚拟软件和硬件,并且可以证明是一种方便的方式来再现硬件的特定表示形式软件用户使用的环境。

每个系统(及其变体)都需要一点时间来设置,但是如果您发现重新加载和重新配置的任务是一项常见任务,则它具有一些明确的价值。


请您扩展一下您在声明中提到的策略“但它足够独特,通常需要单独的策略”吗?我打算使用Vagrant并将VM配置存储在我的源代码存储库中,并且想知道在什么时候必须区别对待它?
CL22

3

Docker将是一个不错的选择。您可以使用dockerfile充当所需VM的清单。您不需要存储任何图像,它将下载所需的图像。而且,它可以使用自己的映像,因此您可以制作自己的基础映像,然后添加环境所需的组件。

使用docker这还可以改善工作流程的其他部分:

  • 可以将创建的环境与项目放置在同一CVS上,从而为您提供一个版本化的环境(整洁!)
  • 泊坞窗可用于提供实时环境,从而减轻在生产环境中启动项目的麻烦。
  • 如果其他人开始与您合作,那么他们所需的就是dockerfile来加载庞大的环境设置。

因此,这里有关使用VM的想法只是部分正确,我知道HDD越来越大,但这不是耗尽所有空间的理由。此外,当VM环境内部需要更多的HDD空间时,这可能会有些棘手,并且有可能需要重建一个。尽管文件大小可能不是问题,但是当您需要通过普通DSL连接通过5Go发送时,互联网速度仍然成为瓶颈。


2

大多数系统(语言,运行时或操作系统)都有一些标准化的软件和配置安装方式,因此请尝试使用它们。如:

  • Java Maven或Gradle
  • Perl的CPAN
  • RedHat / Fedora的rpm
  • dpkg / apt-get用于Linux
  • Windows的MSI软件包

然后制作安装说明,以确切说明需要安装的内容/必要的步骤:

  • 提供有关您假定要安装的内容的简短说明(基本操作系统,基本运行时,例如Java / Perl / Python ...)
  • 编写简短的脚本来执行所需的安装(理想情况下,只需调用Maven之类的工具即可)
  • 在全新安装(例如VM)上进行测试

然后,您应该能够重新创建环境,其他人也应该能够重新创建环境(如果这不是一个单独的项目,这可能很重要)。

您可能需要将必要的安装软件包存储在某个地方,或者仅包含下载说明(除非系统跟踪这些内容,例如apt-get或Maven)。这取决于您对软件包提供者的信任程度-可能不需要存储核心Debian软件包,但是对于一些小型免费软件项目,这可能是个好主意。

VM解决方案也将起作用,并且短期内可能会减少工作量(仅保留VM)。但是,我觉得此解决方案提供了更大的灵活性,例如在更改环境时。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.