80

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

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

4

13 回答 13

69

有几个选项,有时这些选项的组合很有用:

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

各种选项的详细信息:

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

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

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

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

目前我使用上述组合来自动化该过程,如下所示:

  • 从在 VMWare 来宾上安装准系统操作系统开始
  • 运行 shell 脚本来安装 Puppet 并从源代码控制中检索其配置
  • 木偶安装工具/组件/配置
  • 从源代码控制中签出文件以构建和部署我们的 Web 应用程序
于 2009-05-08T11:55:39.263 回答
20

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

流浪汉

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

几分钟之内,您就可以启动并运行您最喜欢的 Linux 发行版的全新副本,并以与生产服务器完全相同的方式进行配置

无需再与 OSX 或 Windows 争夺安装 PHP、MySQL 等。所有软件都在虚拟机中生存和运行。您甚至可以使用 SSH 登录vagrant ssh。如果您犯了错误或破坏了某些东西,vagrant destroy那就去做吧,然后vagrant up重新开始。

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

我现在几乎为我所做的每个项目都创建了一个新的“Vagrant box”。我的所有设置都保存在项目存储库中,因此很容易引入其他团队成员。他们只需要提取 repo 并运行vagrant up,就可以开始使用了。

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

一探究竟!

于 2013-05-21T17:39:58.770 回答
13

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

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

这应该解决个别项目的设置麻烦。

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

编辑:

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

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

于 2009-05-08T11:19:38.530 回答
7

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

于 2009-05-08T11:18:40.907 回答
3

使用puppet配置您的开发和生产环境。使用一流的自动化系统是扩展您的运营的唯一方法。

于 2009-05-08T11:19:45.037 回答
1

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

于 2014-09-10T19:08:01.560 回答
1

总是有使用虚拟机的选项(参见例如VMWare Player)。只需最少的配置,即可为每位新员工创建一个环境并将其复制过来。

于 2009-05-08T11:15:18.620 回答
1

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

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

于 2009-05-08T13:32:19.360 回答
1

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

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

于 2011-06-04T06:11:49.887 回答
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(包代理)。除了节省带宽外,它还会使您的安装速度更快(因为软件包缓存在您的本地网络上)。
于 2011-08-17T22:51:17.797 回答
0

如果您使用的是 linux 风格,您可能拥有一个包管理系统:认为 .rpm 用于 fedora/redhat,或 .deb 用于 ubuntu/debian。您描述的许多东西已经有可用的软件包:svn、eclipse 等。您可以为公司特定软件推出自己的软件包,创建一个存储库(可能仅在本地网络上可用),然后您的设置可以简化为单个bash 脚本,它将公​​司 repo 添加到 /etc/apt/sources.list (debian/ubuntu),然后调用类似的命令,


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

您可以使用buildbot自动为经常更改的公司包进行定期构建。

于 2009-05-08T11:21:06.000 回答
0

如果您使用标准配置的机器,您可以使用全新的、完美配置的安装来镜像磁盘——这在许多公司中是一种非常流行的方法(不仅适用于开发人员)。如果您需要单独配置的操作系统,您可以在将配置的操作系统转换为所需的设置后 tar-bz2 所有添加和更改的文件,然后以 root 身份解压以从头开始构建所需的环境。

于 2009-05-08T11:14:49.917 回答
0

在http://nsnihalsahu.github.io/devscript试用 DevScript 。它的一个命令就像 , devscript lampor devscript laravelor devscript django。在大约几分钟内,取决于您的互联网公司的速度

于 2014-07-05T16:17:30.890 回答