每次新开发人员加入团队或开发人员使用的计算机发生变化时,开发人员都需要做大量工作来设置本地开发环境以使当前项目正常工作。作为一个 SCRUM 团队,我们正在尝试自动化包括部署和测试在内的所有事情,所以我要问的是:是否有工具或实践可以使本地开发环境设置自动化?
例如,要设置我的环境,首先我必须安装 eclipse,然后是 SVN、Apache、Tomcat、MySQL、PHP。之后我填充了数据库,我不得不对各种配置文件等进行细微的更改......有没有办法将这种工作减少到一键式?
每次新开发人员加入团队或开发人员使用的计算机发生变化时,开发人员都需要做大量工作来设置本地开发环境以使当前项目正常工作。作为一个 SCRUM 团队,我们正在尝试自动化包括部署和测试在内的所有事情,所以我要问的是:是否有工具或实践可以使本地开发环境设置自动化?
例如,要设置我的环境,首先我必须安装 eclipse,然后是 SVN、Apache、Tomcat、MySQL、PHP。之后我填充了数据库,我不得不对各种配置文件等进行细微的更改......有没有办法将这种工作减少到一键式?
有几个选项,有时这些选项的组合很有用:
各种选项的详细信息:
自动安装 工具,用于自动安装和配置工作站的各种服务、工具和配置文件:
磁盘映像 当然还有磁盘映像工具用于存储已配置主机的映像,以便可以将其恢复到另一台主机。与虚拟化一样,这对于测试盒特别好,因为很容易将事物恢复到干净的状态。让事情持续更新仍然是一个问题——是否值得为了传播配置文件更改而制作新图像?
虚拟化是另一种选择,例如制作 Xen、VirtualPC 或 VMWare 映像的副本以创建新主机。这对于测试盒特别有用,因为无论测试造成什么混乱,您都可以轻松恢复到干净的已知状态。与磁盘映像工具一样,与使用自动安装/配置工具相比,使主机保持最新需要更多的手动步骤和警惕性。
源代码控制 一旦您安装/配置了必要的工具,那么构建应该就是从源代码存储库中检查所需的内容并构建它。
目前我使用上述组合来自动化该过程,如下所示:
我偶然发现了这个问题,并且很惊讶没有人提到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 的较新项目。只需为该项目安装您想要的版本。
重要的一点是在源代码控制中设置您的项目,以便您可以在签出后立即构建、部署和运行。
这意味着您还应该检查辅助基础设施,例如 Makefile、ant 构建文件等,以及工具的设置,例如 IDE 项目文件。
这应该解决个别项目的设置麻烦。
对于基本的机器设置,您可以使用标准图像。另一种选择是使用您平台的工具来自动安装。在 Linux 下,您可以创建一个依赖于您需要的所有包的元包。在 Windows 下,类似的事情应该可以使用 MSI 等。
编辑:
理想情况下,您无需签入帮助基础架构,而是签入允许构建生成帮助基础架构的信息。这是例如 GNU 构建系统(autotools 等)或 Maven 所采用的方法。这更加优雅,因为您可以(理论上)为任何(受支持的)构建环境生成基础架构,因此您不必绑定到例如一个特定的 IDE,并且辅助基础架构(路径等)中的设置不需要复制主要项目设置。
然而,这也是一种更复杂的方法,所以如果你不能让它工作,我相信直接签入像 IDE 文件这样的东西是可以接受的。
我喜欢使用 Virtual PC 或 VMware 来虚拟化开发环境。这提供了一个可以在开发人员之间共享的标准“开发环境”。您不必担心用户可能添加到系统中的软件可能与您的开发环境发生冲突。它还为我提供了一种方法来处理两个项目,其中开发环境不能都在一个系统上(使用两个不同版本的核心技术)。
使用puppet配置您的开发和生产环境。使用一流的自动化系统是扩展您的运营的唯一方法。
如果您使用 OSX 并使用 Rails。我建议:
总是有使用虚拟机的选项(参见例如VMWare Player)。只需最少的配置,即可为每位新员工创建一个环境并将其复制过来。
在以前的地方,我们在 SCM(clearcase 然后 SVN)中拥有一切(我的意思是一切)。当一个新的开发人员可以安装 ClearCase|SVN 并吸收存储库时。当您需要更新特定的库/工具时,这也可以处理这种情况,因为您可以让开发团队更新他们的环境。
我们为此使用了两个 repo,因此代码和工具/配置位于不同的位置。
我强烈推荐 DevStructure 的 Blueprint。它是开源的,您的用例实际上是我们最初编写该软件的确切原因。我们的目标有所改变,但它仍然是您所描述内容的完美工具。简而言之,您可以创建可重用的服务器配置 - 非常简单的配置管理。我希望这有帮助!
https://github.com/devstructure/blueprint(蓝图@Github)
我自己一直在思考这个问题。您可以将其他一些技术加入其中。这是我目前正在设置的内容:
sudo apt-get install acmecorp-eclipse-env
或sudo apt-get install acmecorp-intellij-env
,例如。apt-cacher
(包代理)。除了节省带宽外,它还会使您的安装速度更快(因为软件包缓存在您的本地网络上)。如果您使用的是 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自动为经常更改的公司包进行定期构建。
如果您使用标准配置的机器,您可以使用全新的、完美配置的安装来镜像磁盘——这在许多公司中是一种非常流行的方法(不仅适用于开发人员)。如果您需要单独配置的操作系统,您可以在将配置的操作系统转换为所需的设置后 tar-bz2 所有添加和更改的文件,然后以 root 身份解压以从头开始构建所需的环境。
在http://nsnihalsahu.github.io/devscript试用 DevScript 。它的一个命令就像 ,
devscript lamp
or devscript laravel
or devscript django
。在大约几分钟内,取决于您的互联网公司的速度