当前位置:  开发笔记 > 编程语言 > 正文

关于多个项目代码管理的问题

关于多个项目代码管理的问题
在公司已经2年了,伴随着公司的成长,我手上的项目也日益增加起来,做了个小经理,带着十来个小弟,发展速度不快不慢,可是最近有点hold不住,到处寻求方法解决一些项目管理的问题,比如文档管理工具,BUG追踪工具,更完善的代码管理方案什么的...也接触过一下大公司的前辈,貌似他们好一部分是有自己公司开发的解决方案,不是完全开放性的.

这里我主要讲一下代码吧,我怕个别网友无法理解我所描述的情况,所以我用最详细的术语来讲一下问题是怎么产生的,我是怎么一一解决的,直到哪里不好决定了

假如我手上有项目1,其实当初是这么做的,在外网服务器上创建SVN,然后检出到本地,这里我本地称它为 项目1_online
然后会再创建一个 项目1 的内网SVN,本地再检出,当 项目1 的功能阶段开发完毕后,测试OK,再将这段时间内的变更文件导到 项目1_online 上,然后提交 项目1_online 的文件到线上,就看到线上的变化了,一旦线上有问题,马上回滚 项目1_online .顺利的话就这样了,继续接收产品需求开发 项目1,过程中如果online发现BUG,则在online上修改代码,本地建立online的vhost测试OK再提交上线.然后这份修正代码再merge到项目1里面以使得开发主干也被修复,这是单个项目的管理情况

后来加了项目2,它不是我们公司主要的经营项目,比如它只是一个很微型的小程序,基本上是一次性开发完成就可以,以后很少需求要去改变它或者升级的,并且由某个熟练的小弟专门负责维护它. 他开发完成后打了个zip包给我上线,于是我对付它的办法是:直接将它上传到外网服务器,解压文件改好数据库配置,建立vhost,DNS神马的... 过了几个月,确实有点修改了,他给了我一个zip升级包,解压即可,于是我又手动上传这个zip再解压...

项目3来了,这个我觉得要建SVN,于是在外网建了它的SVN,本地检出一份.然后也像项目1一样,本地还有个 项目3,而线上的当然也叫 项目3_online,开发模式和项目1一样.如此这般,项目4,5,6,7,8....它们也陆续来了,一次又一次地配SVN,authz,passwd,挺麻烦的哦,也并非所有人都要参与到所有项目中,有的专人负责,有的几个人负责,有的全部负责.那么问题来了:这样要维护好多SVN项目感觉好麻烦. 能不能有更好的办法去管理这些东西?我能不能轻易地添加一个项目到项目列表中,然后生成代码管理地址给大家检出,可视化分配权限--拖拖选选勾勾即可而不用一次次VIM去改?因为每次为新项目配置SVN感觉麻烦,一些小项目都懒得添加了,后来又造成那些项目的更新方法不太爽,或者撤回出现的BUG又麻烦,还是迫不得已去给它配了~

换一个思路,其实一个SVN对应一个项目是很原始的土方法了,不如变一变,一个SVN下多个项目就好了,根目录下每个子目录就是一个项目,每个项目里都有trunk,tags,branches这些,然后autz分配好权限,哪个项目是哪些人参与,那么我要新建目录就只要创建文件夹并添加到版本库即可.只是权限分配方面还是要去linux编辑文件吧~然而这样有一个缺点就是当个别项目并非部署在同一台外网服务器上时不也是要再开另一台远程服务器的SVN?对于咱们小公司来说,十来个项目两三台外网服务器,忍耐一下还是能hold住的,但大公司几百几千个项目的话不带这样玩的吧!

我到处找了找方案,发现有个持续集成管理软件的概念,昨天我安装了Jenkins试了一下,它能定时将我输入的一个版本库代码检出来并记下日志.到这里我只见到它能为我做定时更新而已.然后继续看着教程做下去,追加了一个free-style的节点是after第一个项目build之后来执行的,它是执行一些批量命令的.这些命令里好像就是应该编写单元测试的脚本和代码上线的脚本.至少这时候我已经意识到如果能写自己的命令的话,意味着我可以用这些命令自定义操作,比如将这个项目发布到指定的服务器上.它支持bat和shell命令,虽然我主要在windows下工作但不会bat,但这些当然是能学习一下就能搞定的事情.(另外很多关于Jenkins的教程都是拿JAVA项目做例子的,没有拿PHP做完整例子的,再者那个Ant我也不会,不知道它能不能构建php项目!)

到这里为止我好像初步找到了一个答案,当我怀揣着这个答案问一些前辈的时候他们都说太高大上了吧,都是一个个SVN或者其它方案处理的.那么难道大部分公司都不用这样的东西吗,是不是太过复杂,规模不大都不去使用它了?我怕我犯二所以专门来问一下

然而我是这么设想的,假如使用了持续集成软件,我们的项目将会是这样一个开发运作方式:
我在Jenkins上建立 项目1 节点,每天中午12点开始集成一次,里面配上phpunit的测试脚本(其实我还不怎么熟悉这个,但相信不难掌握,已经看了几章并实践了),这样一旦测试不通过的话我们会收到邮件,就知道这些代码因为某次的提交出现BUG了,这个嘛我相信是用SVN所不能取代的好处,当然也要安排人员认真写好一个个重要的测试用例了,把核心功能测好了,别让它不小心被牵连出BUG.然后构建完毕后发布到内网测试服务器上.其中假设所建立的项目节点是来自 svn://192.168.1.100/project1/trunk 的,我们就是基于这个主干来进行开发,但由于还没熟悉Jenkins(说了这么多次,其实大家可以将它视为一个代名词,反正就是你们所用的管理软件,有类似功能吧?),其实我也不知道它发布到内网服务器上是怎样的.是不是和我们SVN那个一模一样的文件结构,我还得花多几天学习才知道
假设是一模一样的文件结构,那么至少可以找出A和B两个构建点之间的差异文件作为补丁打包上线.打好包后丢到项目1_online上提交就好了,如果有问题就更新到指定版本实现功能撤消(但如果涉及大规模的表结构改动可不是是撤代码那么简单,尽量把开发任务切细来,避免撤代码时数据库结构都难以恢复吧!?我是这样一个理念来做的,然而我也知道并非永远都能这么顺风顺心,总有那么一天,所上的功能涉及表结构大改但出BUG后恢复表结构会变得非常麻烦,这个目前极少可能出现的情况就先不找大家讨教方案啦).

这是我对未来应用了持续集成软件的假想,不知道各位前辈在公司拥有多项目下是怎么处理这些问题的,你们的方案到底方便不方便,有没有什么更优秀的管理办法.能不能尽量满足我的需求:
1.方便增删改以及汇总日志
2.方便更新/撤回
3.方便权限分配(权限这个好像听说Git更方便,但暂时没精力学它,摸了三章而已)
4.方便及早发现BUG,因为偶尔会因为开发了第55个功能,测试时大概感觉没问题,但上线后不起眼的11号功能却被它牵连出BUG了~
5.方便部署到不同的外网服务器上


我只是在大胆试想使用各种方案后的情况会是"多么好",如果我哪里想错了,希望大家指正,分享下你的经验吧,百度上各种文章描述的都是概念,几乎没有人用实际的一个工作流程来描述解决问题的步骤,可能是本人太笨无法理解


回复讨论(解决方案)


如果服务器环境都一样,要配置好 一个,其他直接复制就可以了(jenkins自动部署,服务器监控)
大型团队推荐 GIT 版本库
Gitblit 我用的是这个GIT版本库,JAVA的WEB网页式管理,可以满足你的要求
下面这个是我整理的,并且在使用中的一些项目管理集成自动化监控用到的一些工具!
http://blog.csdn.net/fenglailea/article/details/40506245
LNMPS:
LINUX+Nginx+Mysql+PHP+Sphinx
作者:风来了.呆狐狸
1.标准化
工具
代码(规范、格式等等)
文档
人员
等等标准化,统一使用一种格式
2.工具

js框架:Jquery 统一jquery版本
JQuery上传插件:uploadify
JQuery表单验证:Validform

弹出层:artDialog
日期时间插件:My97 DatePicker
富文本编辑器:百度编辑器UEditor
前端整合框架:bootstrap (我们主要用于后台)

PHP版本:php5.6.x (opencache正式服务器、正式服务器测试环境开启)
数据库版本:MariaDB 10.0.x(mysql分支)
缓存: memcache
PHP开发工具:phpStorm
PHP调试工具:Xdebug 和 手工调试
数据库管理工具:Navicat Premium
文件代码对比工具:BCompare
文本编辑器:Notepad++
浏览器:chrome
数据库建模
流程图
本地开发环境WIN:upupw套件(全部更换于正式环境一样)
开发服务器环境 :lanmps套件 项目统一测试环境和正式环境一样, 开启错误日志显示
正式服务器测试环境 :lanmps套件 项目在发布到正式环境前,最后一次测试,关闭错误日志显示

下面3个 我们还在人工范围
代码检查
压力测试
自动化测试
3.搜索

mysql sql like搜索满足不了项目需要,所以这里 使用 sphinx-for-chinese
sphinx (中文的 一般使用coreseek 或sphinx-for-chinese)
4.版本库

GIT 开源,免费分布式版本控制系统,适合中大型团队开发 (我们使用的)
SVN 开放源码的版本控制系统
5.自动化部署

jenkins 配合 SVN或GIT 使用,配置自动化部署,备份,恢复
6.服务器监控通知

监控工具(Nagios,监控宝等等)
通告工具(百度通告平台)
监控、通告工具介绍:http://blog.csdn.net/sylcc_/article/details/40475097
7.项目管理(测试用例、缺陷安排、日程安排等等)

jira :项目于事务跟踪工具 ,被广泛应用于缺陷跟踪、客户服务、需求收集、流程审批、任务跟踪、项目跟踪和敏捷管理等工作领域。
confluence: 可以配合jira使用,类似 于博客文档工具
禅道项目管理 :集产品管理、项目管理、质量管理、文档管理、组织管理和事务管理于一体,是一款功能完备的项目管理软件,完美地覆盖了项目管理的核心流程
我们使用的是 禅道
8.其他因素
本类就属于幻想了,
在合理范围内自由化工作时间
工作环境舒适(自己设计配置自己工作环境)
可以遥望远方
多绿色
多美女
多活动(不定期组织活动.年头到年末一直开发实在太枯燥)
哈哈,特别希望像 谷歌苹果那类的公司

谢谢,不过没多少收获...我要的是jenkins的具体信息~初步通过其它渠道了解到了,它并不是用来管理代码,而是将一些重复的工作自动化
Git取代SVN的话,估计我这里的小团队不太合适,而且上司有点抗拒更换SVN这个念头

推荐阅读
喜生-Da
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有