如何自动化开发环境设置?[关闭]


80

每次新开发人员加入团队或使用开发人员的计算机时,开发人员都需要做大量工作来设置本地开发环境以使当前项目正常工作。作为SCRUM团队,我们正在尝试使包括部署和测试在内的所有过程自动化,所以我要问的是:是否存在使本地开发环境设置自动化的工具或实践?

例如,要设置环境,首先必须安装eclipse,然后安装SVN,Apache,Tomcat,MySQL,PHP。之后,我填充了数据库,并且不得不对各种配置文件等进行细微更改。是否有办法将这种工作减少到一键式?

Answers:


67

有几种选择,有时将它们组合起来很有用:

  • 自动安装
  • 磁盘映像
  • 虚拟化
  • 源代码控制

各种选项的详细信息:

  1. 自动化安装 工具,用于自动化安装和配置工作站的各种服务,工具和配置文件:

    • 木偶有学习曲线,但功能强大。定义机器的类别(开发箱,Web服务器等),然后它执行安装,配置并将箱保持在正确状态所需的操作。您要求单击,但默认情况下Puppet是零单击,因为它会定期检查您的计算机以确保仍按需配置。它会检测文件或模式的更改时间,并解决问题。我目前使用它来维护少数RedHat Linux盒,尽管它能够处理数千个。(从2009-05-08开始不支持Windows)。
    • Cfengine是另一个。我已经看到有70名工程师在使用RedHat Linux的商店中成功使用了此方法。它的局限性是伪造的原因之一。
    • SmartFrog是另一个用于配置主机的工具。它确实支持Windows。
    • Shell脚本。 RightScale包含有关如何使用Shell脚本配置Amazon EC2映像的示例。
    • 安装软件包。在Unix机器上,可以完全使用软件包来完成此操作,而在Windows上,可以选择msi。例如,RubyWorks通过安装一个软件包为您提供完整的Ruby on Rails堆栈,而这些软件包又会通过依赖关系安装其他软件包。
  2. 磁盘映像 当然,还有磁盘映像工具,用于存储已配置主机的映像,以便可以将其还原到其他主机。与虚拟化一样,这对于测试箱特别有用,因为它很容易将内容还原到干净的状态。使事情保持最新状态仍然是一个问题-仅为了传播配置文件更改而值得制作新映像吗?

  3. 虚拟化是另一种选择,例如制作Xen,VirtualPC或VMWare映像的副本以创建新主机。这对于测试盒特别有用,因为无论测试产生什么混乱,您都可以轻松地恢复到干净的已知状态。与磁盘映像工具一样,与使用自动安装/配置工具相比,使主机保持最新状态需要更多的手动步骤和警惕性。

  4. 源代码控制 一旦您安装/配置了必要的工具,然后进行构建就应该从源代码存储库中检查出所需内容并进行构建。

目前,我结合使用上述方法来实现以下过程的自动化:

  • 从在VMWare guest虚拟机上准系统安装开始
  • 运行shell脚本以安装Puppet并从源代码控制中检索其配置
  • 用于安装工具/组件/配置的
  • 从源代码控制中检出文件以构建和部署我们的Web应用程序

在我们的办公室中有Windows,Linux和Mac OS。所以我将选择虚拟化选项。
nimcap,2009年

我们采用虚拟化技术,这是一个很好的解决方案。当我开始时,我花了3-4天的时间进行设置,现在新的开发人员在复制VPC映像所需的时间里得到了设置。
Burt

5
您是否写了agile.dzone.com/articles/4-methods-automate-development,因为听起来很相似?
亚伦D

5
不,我没有写那篇文章,尽管从相似之处来看,似乎是我的启发。:-)
Pete TerMaat


20

我偶然发现了这个问题,感到非常惊讶的是,没有人提到Vagrant

流浪汉

正如Pete TerMaat和其他人所提到的,虚拟化是管理和自动化开发环境的好方法。Vagrant从根本上减轻了建立这些虚拟盒子的麻烦。

几分钟内,你可以有你喜欢的Linux的完整拷贝的发行和运行,以及配置的完全相同的方式您的生产服务器。

不再需要与OSX或Windows进行斗争来安装PHP,MySQL等。所有软件均在虚拟机中运行并运行。您甚至可以使用SSH进行登录vagrant ssh。如果您犯了一个错误或破坏了某些东西,就vagrant destroy这样,然后vagrant up重新开始。

Vagrant自动创建一个与本地文件系统同步的文件夹,这意味着您无需在虚拟机内进行开发(即使用Vim)。使用您选择的编辑器。

现在,我几乎为我所做的每个项目都创建了一个新的“ Vagrant box”。我的所有设置都保存在项目存储库中,因此可以轻松招募另一个团队成员。他们只需要拉出回购库并运行vagrant up,它们就准备就绪了。

这也使处理具有不同软件需求的项目变得更加容易。也许您有一些依赖PHP 5.3的项目,但是有些较新的项目则运行PHP 5.4。只需安装该项目所需的版本即可。

一探究竟!


1
在虚拟化环境中调试可能会很痛苦
Jonathan

13

重要的一点是在源代码管理中设置项目,以便您可以在签出后立即构建,部署和运行。

这意味着您还应该签入帮助程序基础结构,例如Makefile,ant buildfile等,以及工具的设置,例如IDE项目文件。

那应该解决单个项目的安装麻烦。

对于基本的机器设置,您可以使用标准映像。另一种选择是使用平台的工具来自动安装。在Linux下,您可以创建一个依赖于所需所有软件包的元软件包。在Windows下,使用MSI等类似的东西应该是可能的。

编辑:

理想情况下,您无需检入帮助程序基础结构,而是检入允许构建生成辅助程序基础结构的信息。这是例如GNU构建系统(自动工具等)或Maven所采用的方法。这甚至更加优雅,因为您可以(理论上)为任何(受支持的)构建环境生成基础结构,因此您不必绑定到一个特定的IDE,并且辅助基础结构(路径等)中的设置不需要重复主要项目设置。

但是,这也是一种更复杂的方法,因此,如果您无法使其正常工作,我认为直接检查IDE文件等内容是可以接受的。


7

我喜欢使用Virtual PC或VMware虚拟化开发环境。这提供了可以在开发人员之间共享的标准“开发环境”。您不必担心用户可以将其添加到系统中的软件可能与您的开发环境冲突。它还为我提供了一种方法来处理两个开发环境不能都在一个系统上的项目(使用两种不同版本的核心技术)。


在VirtualPc / VMWare环境中运行是否会对性能产生很大影响?您是否使用Visual Studio 2008?
乔尔·加弗罗

我知道至少有一家大型软件开发商店,专门在VM(VMWare)中进行所有开发。现在,CPU有了硬件虚拟化支持,情况会好得多……
tomfanning

您必须注意计算机名称冲突。当两个具有相同名称的计算机出现在单个网络上时,Windows不太满意。我也希望不要在虚拟机中安装我的开发环境。开销确实会拖累我的表现。
基辅埃利2009年

2
我们使用完全虚拟化的开发环境。我们使用VMServer或VirtualBox托管Vista VM。VM映像包含我们的整个开发堆栈,但未附加到corp域。当用户需要一台新计算机时,他们会在本地复制它,运行NewSID,然后使用唯一的计算机名称加入域。在现代硬件上,没有明显的性能下降。我们在解决方案中将VS2008与约20个C ++ / C#项目一起使用,并且一切正常。
科林·戴斯蒙德

我看到的虚拟化的一大优势是能够按原样保存当前状态,这样以后再返回时,您就可以准确地回到原来的状态。与设置新的开发机器并不完全相关,但是使用虚拟机具有很好的副作用。
乔尔·加弗罗


1

始终可以选择使用虚拟机(例如,参见VMWare Player)。创建一个环境,并以最少的配置将其复制给每个新员工。


1

在先前的地方,我们在SCM中拥有一切(我的意思是一切)(先是透明案例,然后是SVN)。当新的开发人员可以在其中安装ClearCase | SVN并删除存储库时。当您需要更新特定的lib / tool时,这也可以解决,因为您可以让开发团队更新其环境。

为此,我们使用了两个存储库,因此代码和工具/配置位于不同的位置。


1

我强烈推荐DevStructure中的Blueprint。它是开源的,您的用例实际上是我们最初编写该软件的确切原因。我们的目标有所改变,但仍然是您所描述的理想工具。简而言之,您可以创建可重用的服务器配置-简单的配置管理。我希望这有帮助!

https://github.com/devstructure/blueprint(蓝图@ Github)


1
是关于开发环境还是服务器?
nimcap 2011年

1

我自己一直在想这个。您还可以使用其他一些技术。这是我当前正在设置的:

  • 基于PXE的预种子安装映像(Debian Squeeze)。您可以启动裸机(或新的虚拟设备),然后从PXE引导菜单中选择映像。这具有能够在物理机器上(除了虚拟设备)安装环境的主要优点。
  • 有人已经提到过木偶。我使用CFEngine,但这是类似的协议。本质上,您的配置已记录在案并集中在策略文件中,这些文件由客户端上的代理不断执行。
  • 如果您不需要严格的环境(例如,开发人员可以选择工具集的组合),则可以滚动自己的deb软件包,以便新开发人员可以键入sudo apt-get install acmecorp-eclipse-envsudo apt-get install acmecorp-intellij-env
  • 稍微偏离主题,但是如果您运行的是基于Debian的环境(即Ubuntu),请考虑安装apt-cacher(软件包代理)。除了节省带宽外,它还可以使您的安装速度更快(因为程序包已缓存在本地网络中)。


0

如果您使用标准配置的计算机,则可以通过全新配置的磁盘对磁盘进行镜像-这在许多公司中都是非常流行的方法(也不只是对开发人员而言)。如果您需要单独配置的操作系统,则可以在配置的操作系统变成所需的设置后,将所有添加和更改的文件tar-bz2打包,只需将其解压缩为root即可从头开始构建所需的环境。


0

如果您使用的是Linux操作系统,则可能已经有了一个软件包管理系统:对于fedora / redhat认为.rpm,对于ubuntu / debian认为.deb。您描述的许多事物已经提供了可用的软件包:svn,eclipse等。您可以针对公司特定的软件推出自己的软件包,创建存储库(也许仅在本地网络上可用),然后将您的设置简化为一个bash脚本,它将公​​司回购添加到/etc/apt/sources.list(debian / ubuntu),然后调用以下命令:


/home/newhire$ apt-get update && apt-get install some complete package list

您可以使用buildbot来自动执行经常更改的公司软件包的常规构建。


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.