微信号:heiyeluren-tech

介绍:LAMP相关的互联网技术的交流咨询分享

【02-11】 分享下从开发上线的操作流程、辅助工具等

2015-03-15 00:12 黑夜路人技术

【今日话题】

分享下从开发上线的操作流程、辅助工具等 - 刘科彬


1. 本机写代码,写好后传测试机调试,调试好传svn,然后打包发给测试进行测试,测试完成开始上线,同时要考虑回滚策略。 - 黑夜路人


2. 利用软链回滚就好了. 线上服务器保存多个版本的代码 - sky


3. 从开发说起, 共用一台开发机, 各自目录下checkout项目, nginx配自己的域名, 共用一个数据库, 避免一些缺字段少文件的问题. - twin


4. 自选机器上vim开发,或是samba到window,或是ide保存自动上传,或者挂载到自己电脑上开发

其中samba较慢,linux挂载到window,协议忘了,速度还行,就是支持软件不行, linux挂载到mac速度不错

主要目的都是一个,使用同一台机,避免环境的各种问题. docker,vagrant之类的可以解决环境问题,哪位兄弟详细分享下 - twin


5. 多个rd,1个qa,rd基于master分支开发,开发完成,发提测邮件,标注远程分支名,qa在后台页面切分支进行测试(将git的多个操作做成后台功能),这样qa可以进行多个rd的测试工作,上线前合到develop分支,运维拉代码到pre,pre测试通过到线上,线上验证ok,进行master分支合并并加tag,master分支合并必须保证是fast forward - bananaliu


6. 由于我们项目用了composer,submodule等,所以完整更新代码需要好几条命令,为了保证无误,才整到到后台的 - bananaliu


7. 问: 线上一直是pre分支吗? composer的vendor目录,不加到代码库吗? - twin


回: 只加json配置文件啊. 线上是naster分支. 我们是拿develop分支上线的,线上验证ok合master - bananaliu


8. 问: @bananaliu 每次上线都要composer install 一下? 这样挺慢的吧. 还有假如composer安装的库有bug,那没法改了? - twin


回: composer updater啊. 我们composer改过的,从内网gitlab拉代码 - bananaliu


回: 我们composer装完都加进版本控制,定期更新. 有bug直接改里面的库, 再同步到库对应的git - twin


9. 部门买的gitlab。先git fork一下,checkout到本机。我个人偏高IDE,在c/c++/go代码用eclipse,java其它代码用IDEA。之后用jenkins提交到测试环境,测试环境是全docker化的,建环境很简单,主要问题是暂时没法跟jenkins之类的联动。测试后提pull request,做merge的人如果有必要就做code review。到正式环境用jenkins做发布和ci,每小时build一次。基本都是开源工具。

没有全职测试和OP,出问题自己搞定。 - 张京磊🎈


10. 之前是重要功能本地写好单元测试, 跑通了再git push, git触发jenkins跑ci. 我们测试人工不足,才要写点单元测试. - twin


11. gitlab:

1,master分支保持最新

2,开发者所有功能点都是从master开分支

3,功能点开发完,子分支开发者负责功能完整测试.

4,提测,子分支测试环境通过(这时候可以Assignee指定用户做一个code review)

5,由测试合并到release进行大版本测试

6,release->master

配合issue 进行任务分配记录 - 林志勇


12. 统一开发环境我们用Vagrant 然后映射本地路径,

后期已经部署到Docker

build 版本用Hudson

额 hudson 是Jenkins 的前身, out了 - 林志勇


13. 我下面讲的,可能跟上面的不一样。

vagrant 我一直在使用,指定目录可写权限,在Vagrantfile文件配置


config.vm.synced_folder "/PATH/web/app/data", "/home/web/app/data", :mount_options => ['dmode=777', 'fmode=777']

config.vm.synced_folder "/PATH/web/app/log", "/home/web/app/log", :mount_options => ['dmode=777', 'fmode=777']


其中,你不想app整个可写,可以配置多个使 data、 log 分别有权限


使用这么久,还是有一个问题:

在宿主编辑 js css文件,没作用;

需要在vagrant里编辑才有作用。


另外学习docker,挂载多目录、装mysql、绑定IP等问题,没找到访文档和方法。

没继续学习,如有解决上面问题,求分享一下。thx - 阿钢


14. 我们目前的流程是!开发本机写代码!写完代码直接上传到SVN!测试机和预发布直接从SVN更新代码!都正常后!运维从SVN取文件!然后上传到线上!

不过我们会在预发布的时候会多次打回给测试或者开发 - 马


15. 基本同上,开发前期要求有框架图,设计图,部分功能强制流程图,设计文档,如api需说明文档 - xingxing


16. 采用了hgflow模型(gitflow),项目管理使用redmine,redmine中每一个feature都在hgflow中有一个feature分支(对于紧急修复类的在hg中创建hotfix版本),每一个分支在创建时就自动在测试环境部署vhost方便测试。当feature开发完成,则在redmine中分配计划上线版本(比如v1.2.0),在hg中创建release分支,提交给测试人员,测试通过后合并分支到主分支再测试,最后launch - 刘科彬


17. gitflow略显麻烦。方便会滚。能解决并行编程就可以了 - hi, man


18. Jira+git+vagrant - mosen


19. 小团队直接在svn主干上开发,定期打release分支,测试、修复,修复的代码同时ci到主干。测试没有问题了把release分支co到分发机,由分发机rsync到线上

上线完成的分支原则上不能再动了

有问题直接回滚到上次release分支

其中各个步骤都都可以自己写脚本或用开源软件,比如打包jenkins - now


20. 我全部master开发,因为上手简单,是否拉feature,fix分支自行控制,只要不影响master功能就行. 核心,基础功能改造,一般都拉refactoring分支,因为一改系统就挂 - twin


21. 我们有一个repo叫做design,专门用来设计系统,新需求全部用issue来讨论,然后讨论结束,发送PR到设计稿,然后开始其他repo里面的coding,每个需求会有一个branch,全部PR,这些都是需要在本地经过go test和go vet,代码测试覆盖率保持在95%以上,然后一旦递交,我们有自动化测试,测试失败发送到IRC群组。

部署我们只要在IRC给机器人发送一个部署命令就可以自动化部署

docker让部署变的超级简单 - 谢孟军


22. 问: 代码覆盖率 用什么测试? - 付坤


回: go cover. 可以看到所有的覆盖率,还能分析测试用例哪些没有覆盖. go就是工程上面的工具比较全 - 谢孟军


23. 先拉取一个分支在本地开发,然后合并到主干,打release包到测试服,测试没问题同步到前端机

jinkens也是不错的一个工具

据说有的团队在用quickbuild,有用过这个的吗 - 酸酸哥


回: 新浪微博在用 - 小刺猬


24. 我们团队全是在GitHub上的私有库。每个人fork一个开发测试。然后Jenkins部署测试服务器。客户端联调没问题以后再Jenkins上发布然后部署到所有服务器。 - Reilost


25. 用bitbucket私有库,开发用git flow,部署用master分支 - 墨文


26. vagrant本机开发。 功能完成后本机自测。 提交svn或者git。 测试机上拉取代码测试。通过后报版本给上线。 每天线上发布的多十多次。

以前我还想以后找专业测试。 现在我想以后不会找单独的测试职位。开发自测即可

@twin  我们开发也是共用数据库的。 - @理鱼


27. 我们以前也计划单独的测试部门,最终还是搁浅咯~ 开发自测,组负责人负担相应责任。 - xingxing


回: 双刃剑,独立部门的好处还是有的,比如说可以在不同的维度考虑问题,对功能的评估可以量化等.. - xingxing


28. 有了测试开发周期明显拉长了 什么东西上线都要找测试测一遍 - 姚文强


29. vagrant+git+公用db,每个人的分支自己控制,所有开发不能在自己的master上发生,所有的提交都是到自己本地master线拉取,合并,解决冲突再推远程 - adam


30. 是否需要设测试人员职位要看系统对故障率的容忍度,开发人员自测是按照设计流程来测,一般不考虑例外,测试程度还与开发人员的责任心有很大关系,一般来说开发人员作白盒测试,测试人员作黑盒测试,是站在使用者角度来测试的。 - 水浸街


31. @@理鱼 一天发布10次,太牛了,我们一个月发布2次大版本,还有小改造patch包若干 - 水浸街


32. 我们用的是svn 有些项目会考虑两年左右做次 svn的项目迁移 版本号实在是膨胀的太快咯 - xingxing


33. 问: 想切到git,但是团队内有的不会git一直搁置这个怎么破 - cary


回: 强制. 对于一个开发者来说学这个不就是2小时的事儿吗. 最讨厌那种吃老本的程序员了. 比如之前在Github给laravel PR,结果那哥们让我把提交合并一下,结果没整过。。。然后就google了,然后便搞定了。git rebase - 安正超


34. 朋友说 鹅厂 大量的 svn也没说要换的趋势。 能满足需求也不用换吧。 我这里是 老项目svn 新项目 git - 李爽


回: @理鱼 很多已有的系统和svn绑定,所以很难换

鹅厂也有gitlab了,可以自己建项目 - twin


35. 每天发布十多次. 对于电商项目这是致命的.

测试团队还是很重要的,我们之前两周一迭代,测试测出各种BUG几百个.

开发人员自测很有限,自己的功能跑通了就觉得万事大吉了

各种数据准确性测试测的很少 - mosen


36. 研发人员自测大多是实现单元自测,测试不能忽视,而且版本的发布,上线版本的管理工作,最好是测试管理 - shawnvan


37. 各位有过自动根据测试用例生成测试代码的经验吗

就是只需要填写接口的输入输出 不需要写具体测试代码 针对业务级别的接口粒度 - kunsir


回: 用phpunit, 大概分两类测试

一类测试控制器的, 只管输入输出, 一类测试模型的, 逐个方法测试

都是重要的功能才写,实在没有那么多时间,也希望能覆盖多点

要用例自动化,那不如直接写代码, 用BDD方式去写, 还没习惯 - twin


38. 我们是gitflow+gitlab+redmine+smartgit,每个任务建一个redmine单,开发人员从develop开一个分支开发,bug修复从master开,完成后在gitlab提交合并请求,代码审核人员进行代码初审,审完测试人员在自己的测试机把分支拉下来测,测完gitlab打标签转给代码审核人员终审,终审完交给发版人员合并。发版人员定期把即将发布的分支合并到develop,再打一个release分支发出去,发完合回到master分支,master分支跟线上的代码是一致的。 - 李小邪


39. 问: BDD是什么方式 - 张建


回: 例如PHP的codeception ruby的cucumber - twin

大概写法是 $i->fill('表单字段', 'value')->submit()->see('success');

哈哈,只是做写封装,定些范式. 我感觉直接写方便

但好像这些都测不了js, 所以不如进一步,使用casperjs去模拟浏览器做测试 - twin


回: 大概意思就是做到让产品经理或qa通过填表格来测试业务接口

也没有说bdd这么理想化 只是一种代替测试业务接口的方式 - kunsir


40. 问: 有个疑惑请教大家, 线上服务器该不该装git/svn, 通过切换branch,tag实现代码发布? - twin


回: 一般不给装. 会暴漏一些敏感信息 - Ericsuo


回: 将svn信息屏蔽了不就可以了吗 - 涵戈


回: 如果要转的的话记得过滤“点”开头文件 - 阎铭


回: 安全的话就部署二进制的文件 - linbo


41. 自写策略脚本rsync同步即可

我们有三种,其中一种是正式环境到生产环境的,直接svn 的post-commit内置rsync发布,记录相关日志。

一种是测试环境到正式环境的,有个简单的后台(带权限控制的)手工发布,有操作记录。

还有一种是团队协作的测试部署,方式略乱只看结果 - xingxing


42. jenkins

一般都是有后台的吧,运维方便,开发也方便 - 夜丶有雪


43. 我觉得gitflow挺好用的,然后代码部署直接git pull

自己做个简易代码发布后台 - 轩脉刃


44. 发布时一个需要考虑的要点是:如果要一次发布多个文件,那么如何保证发布过程是原子的。 - 老王


回: 如果用git pull直接拉代码库好像就能保证,因为git不是一个个文件拉下来的,先放到隐藏文件夹的

还有发布到线上,然后修改软链 - 轩脉刃


回: 普通的改软链方式需要重启服务才能让其生效 - 老王


回: 改软链需要重启服务?lnmp不需要吧 - 轩脉刃


回: 我用git pull,有一次重构,把大半个项目的文件目录都改了,都没遇到过加载文件问题 - twin


45. putty winscp. 我是java web开发 - 余辛未


46. 预留一个master2 和master完全一致 上线只拉master2 checkout就ok 和切目录的意思差不多 - 达达


回: 打tag就行了,不用master2 - 轩脉刃


47. 使用的svn配置了hook在提交的时候同步一份到测试站。正式站svn up。项目不大目前没什么问题 - 海浪


 
黑夜路人技术 更多文章 在工作中如何推进新技术,如何让别的同事配合? 如何踏踏实实学点东西,提升内功 [20160908]分布式事务,大家有在线上实践过吗?聊聊遇到的问题,以及如何解决? [20160905]大家都是怎么管理线上的配置,配置变更的分发? [20160829]说说服务器被攻击,怎么定位,怎么解决,怎么防御?
猜您喜欢 iOS事件分发机制(一) hit-Testing 增长黑客:信息满载的黑科技 要测试却没有测试机?那都不是事儿! Game Dev 0 考虑开发一款游戏 D-Future|七牛发布DORA数据处理平台