引子
这两天无意翻到几个月前的Evernote笔记,看到了当时对团队开发环境的一些想法。可惜后来种种,这一想法未能得到实践,只能将其完善后公诸于众,立此存照,日后有空可以一试。
考虑这套开发环境是因为我们遇到了这些问题:
- 开发人员的环境并不统一:dev在osx,ubuntu 11.10和ubuntu 12.04上工作,而ux在windows下工作,协调,解决问题不太方便,尤其是一个bug在A的系统出现,却在自己的环境下无法复用。
- 无法即刻搭建和线上同版本的环境,解决线上问题。小团队节奏很快,当前的工作目录可能和线上版本差几天的代码(diff可能已经是巨量),所以当线上出问题时,將工作环境切换过去非常耗时(尤其是数据库发生变化时)。
- 为新员工构建开发环境耗时且问题重重。这和第一点有些类似,即在ubuntu下工作的构建开发环境的流程在osx下会break。尤其是后期我们不断有开发人员转换系统到osx下。
当时正好看到一篇关于 vagrant 的文章,感觉这正是我想要的救命稻草。
理想的开发环境
我心目中理想的开发环境应该是这样子的:
- 编辑环境和运行/测试环境分离。这意味着开发人员,不管是dev还是ux,可以使用任何她喜欢的系统进行内容的编辑,而其产出可以无缝地运行在另一个统一的环境。无缝是很重要的体验,如果分离意味着在两个系统显示地频繁切换,那还不如不分离;在此基础上的统一的环境则让大家在同一个上下文中交流。
- 开发人员可以同时工作在好几个版本下。在途客圈,一个relase(或者一个scrum)以两周为周期,一周开发,一周测试,然后就上线,如图所示:
这意味着在任何一周,开发人员同时工作在3个不同的branch上,以week 3第一天为例:Dalian已经部署到线上,Edingburgh交付测试,而Florence正在开发中。开发人员能够无痛地在这三个环境中任意切换,就像任务调度一样,保存上下文,切换到另一个branch,开始工作。作为小团队,我们不希望甚至不可能将有限的人员切成三份来运作,所以应该通过工具支持这种开发状态。 - 能很好地支持持续集成。
travis-ci.org
跑跑开源项目还可以,但商业项目就免了,而且其每次构建都rebuild整套环境这个效率太低。
构建理想的开发环境
存在的问题和期望的解决方案已经摆出来了,接下来就是如何实现的问题。这种场景是典型的虚拟机大展拳脚的地方,VmWare会很欣慰地摆出VDI + vSphere的解决方案。不过小团队人少钱紧,自然只能寻找免费的替代品,即之前提到的 vagrant
。
什么是vagrant?
我对它的不太确切的理解是:一套自动化创建,部署和使用虚拟机的工具。vagrant
原生支持 virtualbox
,这就足够了。通过一系列CLI命令,我们可以很方便地操作虚拟机。
- 创建并运行虚拟机:
$ vagrant box add lucid32 http://files.vagrantup.com/lucid32.box $ vagrant init lucid32 $ vagrant up
- 登入虚拟机:
$ vagrant ssh
- 打包虚拟机:
$ vagrant package --vagrantfile Vagrantfile.pkg
更详细的 vagrant
使用说明请参考其 文档,这里就不详细介绍。
如何使用Vagrant构建理想的开发环境
在这个模型中,大家交流的基础是虚拟机。虚拟机随时被创建,随时又销毁,有一个box服务器 vagrant repo
来统一存储所有box并提供上传/下载服务。box服务器提供两类box:
- 基准box。每天半夜从github pull相应branch的代码,并辅以对应的database,自动打包成一个基准box。每个活跃的branch每天都会有一个新的基准box。基准box保存一周足矣。大家新的一天工作的基础是基准box。
- PR box。解决线上问题时,和QA,CI交流使用的box。
任意一个box都是一个沙箱,它包含和线上环境同版本的操作系统,运行环境。同时里面有对应branch的代码库和数据库。数据库采用线上数据库的一个子集,可以让系统正常运行即可。box和用户的host OS间可以共享目录,比如说代码的目录,这样可以让用户通过host OS上的个性化编辑环境撰写代码。此外,box里的port和host OS的port要能一一映射,这样用户完全具有本地的测试体验。
详细的环境和工作场景参见下图:
适用场景
这样的开发环境能满足本地办公团队,甚至远程办公团队的需要。
- 同一个地点办公的团队,
vagrant repo
服务器可以放在本地,以获得最好的下载速度。 - 异地办公或者服务于开源项目的松散团队,可以把
bagrant repo
放在一个公网服务器,让参与者都能访问(安全性不在本文讨论)。访问速度的问题可以通过本地缓存来解决,这样在多人下载同一个box时会有近乎本地访问的体验。
相关推荐
### 高效团队开发:工具与方法 #### 知识点一:高效团队开发的核心理念 - **定义**:高效团队开发是指通过一系列管理和技术手段,实现团队成员间的高效协作,从而提高软件开发效率和质量的过程。 - **核心价值**:...
"高效团队开发工具与方法"这个主题涵盖了多个关键领域,如持续集成、自动化测试和持续交付,这些都是现代软件开发流程的核心组成部分。 首先,让我们深入理解持续集成(Continuous Integration, CI)。它是一种开发...
在IT行业中,自动化测试平台是提高软件开发效率和质量的关键工具。"高效自动化测试平台入门到精通"这一主题涵盖了从基础概念...通过掌握这些技能,你可以创建更高效的自动化测试平台,从而提升整个开发团队的工作效率。
本文将详细介绍如何在Windows XP 32位系统上搭建基于Selenium2和Python的自动化开发环境。 首先,我们需要选择合适的Python版本。在这里推荐使用2.7.2,因为这个版本兼容大多数第三方库和工具,安装包丰富,且不...
ASP.NET办公自动化系统开发实例导航是一本专注于利用ASP.NET技术构建高效、实用的办公自动化系统的指导书籍。由季久峰和李志共同编著,它深入浅出地讲解了如何设计和实现这样的系统,旨在帮助开发者掌握核心技术和...
Python 自动化环境搭建是进行高效 Python 开发和测试的基础,尤其对于自动化任务而言,一个稳定、可重复的环境至关重要。本主题将深入探讨如何构建这样的环境,并介绍一些常用的插件来提升自动化效率。 首先,...
本文详细介绍了CODESYS这一工业自动化综合开发环境的相关特性和使用方法。文中强调了它的多编程语言的支持以及广泛的跨平台兼容能力,在众多操作系统及其工业环境中都能良好运行。它还集成了诸如调试、仿真等功能于...
在构建高效的PHP团队开发环境时,调试能力是至关重要的,它可以帮助开发者快速定位问题,提高代码质量。本文档“PHP可调试团队开发环境配置”提供了一份详细的指导,旨在帮助团队设置一套可调试的PHP开发环境。 1. ...
总结来说,嵌入式软件测试是一个涉及多方面技能的过程,包括合理的环境搭建、高效工具的选择和使用,以及测试自动化策略的实施。通过这些方法,可以确保嵌入式系统的质量,降低维护成本,提高产品可靠性。在实践中,...
总的来说,大型软件团队开发环境管理需要精心规划和协作,确保团队高效运作,保证软件质量,减少错误和延迟,最终实现项目的成功交付。有效的开发环境管理策略能够促进团队间的沟通,提高生产力,并为产品的稳定性和...
6. 集成环境:RF自动化框架往往需要与版本控制系统、持续集成工具等其他开发工具链集成,以实现自动化测试的无缝嵌入到整个软件开发流程中。 在压缩包文件"TDMS - 大改"中,可能包含了与RF自动化框架相关的资源,如...
【自动化测试平台的搭建与开发】是针对辣妈系统接口测试的一种高效解决方案,旨在通过自动化框架减少重复工作,提升测试效率。本文档旨在提供接口自动化测试的技术方案、实施步骤及关键实现方法。以下是对该主题的...
通过工具如TeamCity、Jenkins或者Azure DevOps等,可以实现源代码管理、自动构建、测试和报告的自动化,从而帮助开发团队更高效地协作。 除了介绍工具和方法论,作者还注重于自动化测试策略和设计模式的讨论。在...
3. **人力节省有限**:自动化测试并不能显著减少测试团队的人力需求,反而在初期可能需要更多的人力来支持自动化测试框架的建设和维护。 #### 三、自动化测试的价值与定位 1. **作为防弹衣**:自动化测试的核心作用...
在IT行业中,开发自动化是提升效率、减少错误和加速软件交付过程的关键技术。"让开发自动化.rar"这个压缩包很可能包含一系列的文档、脚本或工具,旨在帮助开发者实现自动化流程。下面我们将深入探讨开发自动化的相关...
在面对如年底大促这样需要大规模扩容和多环境测试的场景时,Ansible 可以快速、高效地帮助运维团队完成任务。通过预定义的 Playbooks 和 Roles,可以轻松地复制环境、扩展容量,并实现一键式部署,大大节省了时间和...
在大型软件团队开发环境中,有效地管理开发环境是项目成功的关键因素。这个PPTX文件主要介绍了微软团队如何管理和运行他们的开发流程,特别是关注了开发人员和测试人员的日常工作。 首先,微软开发团队由多个角色...