如何自动化开发环境设置?

时间:2009-05-08 11:10:57

标签: automation agile development-environment scrum

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

例如,要设置我的环境,首先我必须安装eclipse,然后安装SVN,Apache,Tomcat,MySQL,PHP。之后我填充了数据库,我不得不对各种配置文件进行微小的改动等等......有没有办法将这种劳动减少到一键?

13 个答案:

答案 0 :(得分:65)

有几种选择,有时这些选项的组合非常有用:

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

各种选项的详细信息:

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

    • Puppet有一个学习曲线,但功能强大。您可以定义计算机类(开发盒,Web服务器等),然后执行安装,配置和保持盒子处于正确状态所需的操作。您要求单击一下,但默认情况下Puppet是零点击,因为它会定期检查您的机器以确保它仍然按照需要进行配置。它将检测文件或模式何时更改,并解决问题。我目前使用它来维护一些RedHat Linux机器,虽然它能够处理数千个。 (自2009-05-08起不支持Windows)。
    • Cfengine是另一个。我见过这个在70家工程师使用RedHat Linux的商店里成功使用过。它的局限性是Puppet的部分原因。
    • SmartFrog是另一种配置主机的工具。它确实支持Windows。
    • Shell脚本。 RightScale提供了有关如何使用shell脚本配置Amazon EC2映像的示例。
    • 安装包。在Unix机器上,可以完全使用软件包完成此操作,而在Windows上,msi可能是一种选择。例如,RubyWorks为您提供了一个完整的Ruby on Rails堆栈,所有这些都是通过安装一个包来依次通过依赖项安装其他包。
  2. 磁盘映像当然,还有disk imaging tools用于存储已配置主机的映像,以便可以将其还原到其他主机。与虚拟化一样,这对于测试盒来说尤其不错,因为它很容易将事物恢复到干净的状态。保持最新状态仍然是一个问题 - 是否值得制作新图像以传播配置文件更改?

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

  4. 源代码控制一旦安装/配置了必要的工具,那么构建应该是从源代码存储库中检查所需内容并构建它。 / p>

  5. 目前,我使用上述方法的组合来自动化流程,如下所示:

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

答案 1 :(得分:18)

我偶然发现了这个问题,并且非常惊讶没人提到Vagrant

Vagrant

正如Pete TerMaat和其他人所提到的,虚拟化是管理和自动化开发环境的好方法。 Vagrant基本上可以避免设置这些虚拟盒子。

几分钟之内,您就可以获得您喜爱的Linux发行版的全新副本,并provisioned与生产服务器完全相同。

不再与OSX或Windows争夺安装PHP,MySQL等。所有软件都在虚拟机内部运行。您甚至可以使用vagrant ssh进行SSH登录。如果您犯了错误或破坏了某些内容,只需vagrant destroy,然后vagrant up重新开始。

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

我现在为几乎每个项目创建一个新的“Vagrant box”。我的所有设置都保存在项目存储库中,因此很容易引入另一个团队成员。他们只需要拉回购物,然后运行vagrant up,他们就准备好了。

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

Check it out!

答案 2 :(得分:13)

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

这意味着您还应该检查辅助基础结构,例如Makefile,ant buildfiles等,以及工具的设置,例如IDE项目文件。

这应该照顾个别项目的设置麻烦。

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

编辑:

理想情况下,您可以检查允许构建生成帮助程序基础结构的信息,而不是检查帮助程序基础结构。这是例如采取的方法。 GNU构建系统(autotools等),或Maven。这更加优雅,因为您可以(理论上)为任何(支持的)构建环境生成基础结构,因此您不必受限于一个特定的IDE,辅助基础结构(路径等)中的设置不需要复制主项目设置。

然而,这也是一种更复杂的方法,所以如果你不能让它工作,我相信直接检查IDE文件之类的东西是可以接受的。

答案 3 :(得分:7)

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

答案 4 :(得分:3)

使用puppet配置开发和生产环境。使用顶尖的自动化系统是扩展操作的唯一方法。

答案 5 :(得分:1)

总是可以选择使用虚拟机(参见例如VMWare Player)。创建一个环境并为每个新员工复制它,只需要最少的配置。

答案 6 :(得分:1)

在之前的地方,我们拥有SCM中的所有内容(我的意思是一切)(clearcase然后是SVN)。当一个新的开发人员可以在他们安装ClearCase | SVN并吸收存储库时。当您需要更新特定的lib /工具时,这也会处理这种情况,因为您可以让开发团队更新他们的环境。

我们使用了两个repo,因此代码和工具/配置存在于不同的地方。

答案 7 :(得分:1)

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

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

答案 8 :(得分:1)

我一直在考虑这个问题。您还可以使用其他一些技术。这就是我目前正在设置的内容:

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

答案 9 :(得分:1)

如果您正在使用OSX并使用Rails。我建议:

答案 10 :(得分:0)

如果您在标准配置中使用计算机,则可以使用全新配置完美的安装对磁盘进行映像 - 这在许多公司中都是非常流行的方法(并且不仅仅适用于开发人员)。如果您需要单独配置的操作系统,只要将已配置的操作系统转换为您想要的设置,您就可以tar-bz2所有添加和更改的文件,只需将其解压缩为root,即可从头开始创建所需的环境。

答案 11 :(得分:0)

如果你使用的是Linux风格,你可能有一个软件包管理系统:认为.rpm用于fedora / redhat,或者.deb用于ubuntu / debian。您描述的许多内容已经提供了可用的软件包:svn,eclipse等。您可以为公司特定软件推送自己的软件包,创建存储库(可能只在本地网络上可用),然后您的设置可以简化为单个bash脚本将公司仓库添加到/etc/apt/sources.list(debian / ubuntu),然后调用命令,如,


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

您可以使用buildbot自动执行经常更改的公司包的常规版本。

答案 12 :(得分:0)

http://nsnihalsahu.github.io/devscript处试用DevScript。 它的一个命令就像, devscript lampdevscript laraveldevscript django。大约几分钟,取决于您的互联网协作的速度