前面介绍了创业型软件公司的工作模式,这里详细介绍下如何实施,第一步是先要搭建环境,有了环境才能开展工作。
整个软件项目分为四个环境 开发本地环境、开发环境、测试环境、IDC环境。和传统C++开发不一样的模式是多了第一个开发本地环境。这是为什么呢,因为目前大部分开发人员还是比较熟悉windows下开发。对于mac和linux下直接使用软件并且开发的中国开发者还是少之又少,这套架构就这个现状做出来的。如下是环境搭建架构图:
从环境来说:
一、开发本地环境、开发集成服务器搭建。 前端开发者、后台开发者。
前端开发用的最多的是photoshop和dreamweaver。在做psd之前大部分是不会协同开发的,只有整个文件传递过来过去。html切割的时候可能就会多个人协同开发了。这个时候需要一个集中ftp服务器、svn服务器。svn服务器用于保存版本代码库,用于保存历史修改的版本和开发人员协同。ftp服务器适用于及时修改时保存上传到预览服务器进行预览。看到这里有人也许会问,我直接合并svn和ftp不行吗?其实有这样的问题,如果直接提交svn,后台开发人员就会从svn看到。本来是前端的集成协同开发预览,结果影响到后台容易引起版本混乱。
后台开发怎么搭建环境?用eclipse在本地环境搭建开发环境,通过tomcat插件或者jetty启动调试class、jsp。之前看过很多公司都通过打成war包发布到集成环境再调试。集成环境大家都去集成容易引起版本混乱。即使不发布到集成环境,在本地就算修改个小的class文件也要重启war包有点浪费时间。最好就是利用tomcat的热部署,修改小功能直接生效。现在我们就是这样做的,用maven管理jar包依赖,ant本地打包、拷贝包,用eclipse的tomcat插件热部署快速开发。等到所有功能开发好了。把分支版本发布到开发环境进行集成测试。
开发环境涉及的软件有:nexus 、maven、tomcat服务器、mysql、ftp、jenkins、svn、jira、fisheye、eclipse、dreamweaver、photoshop、nginx。
软件的作用:
nexus作为集中仓库管理,因为每个工程如果都有一堆jar包,很难管理。加上svn上传、分支、合并耗费网络带宽、空间。如果有个地方把这些浪费空间的jar集中管理起来,所有工程合用岂不是很好。
maven是软件生命周期、依赖管理,有了集中管理jar包,就需要有个东西把jar包仓库和工程连接起来。
tomcat服务器是本地开发使用和集中测试服务器。
mysql就没必要每个开发机器都装一个了,放在一个开发环境就可以。
ftp作为前端开发上传文件使用。
jenkins是持续集成,开发和前端都把代码弄好,怎么融合集成在一起测试呢,总需要有个人来把所有的文件合并在一起吧?这个软件就起到这个角色,把所有文件集成、编译、打包、发布到tomcat服务器。如下图:
svn代码版本管理,大家都知道协同作用。
jira用于需求、bug等管理。
fisheye用于代码统计、审核等。
eclipse、dreamweaver、photoshop不用说啦。
nginx主要用于做虚拟主机和静态资源管理。因为我们可能同时开发多个网站,nginx可以根据不同的域名转发到不同的web服务器。
二、测试服务器。开发、测试。
开发集成测试环境通过后,这个就可以转测试了。通过持续集成,测试部署好环境就开始测试。测试环境同样依赖于集中仓库、maven、持续集成等软件。也就是集成测试环境、开发集成环境、开发本地环境都是用的一套jar包,是不是很cool。如果测试不通过,就要转回开发,开发好再转测试。怎么保证开发的质量和测试的质量,还有大家的协作性,这个过程涉及到软件工程和绩效考核,后面再说。测试通过一些测试,测试通过后就可以发布到外网了。这个时候需要提供发布列表、操作步骤、数据库操作脚本给到运维审核,审核通过后才能发布。
怎么发布到外网IDC呢?运维可以根据发布列表去操作,开发和前端一起等着熬夜啊熬夜。没有效率!这里提出了一个增量发布版本的方式,通过发布列表,我们的发布程序会自动检测到发布的文件和发布的机器,发布到对应的服务器。如果发布失败了还可以回滚文件,基本上是一键操作。未来还会把服务器重启、日志输出等集成起来。
三、IDC服务器。
外网的真实服务器,后台和前台。大家能够访问到的网站服务器。业务人员在版本发布后查看。整个流程就做好了。大家在每一次版本开发完了,可以很好的协同、开发、测试、发布。
扩展话题:
1、photoshop能否和html互转并且有版本管理功能,这个做好是个革命性的标志。
2、css、js等静态文件是否也能够纳入自动依赖管理里。这样不用我们发布一个页面文件时发现还有些依赖的js没有发布