一篇访谈,只对其中的工具感兴趣,转载
2012-12-10 14:50
162 查看
CSDN:Esri研发中心是如何进行Java项目开发管理的?
陈抒:Esri北京研发中心的总经理Moxie先生来自美国,因此按照那边的标准要求软件研发过程。项目管理采用Scrum敏捷方法,强调工程师的自我管理。我主要介绍一下我们的代码评审系统和持续集成系统。
首先我们使用Git进行代码管理,不同于VSS、CVS、Subversion,这是个分布式版本系统,功能极其强大,但是学习成本高,原理和使用技巧复杂。在此基础上,采用了Gerrit进行用户权限管理和代码评审管理,程序员的代码只有经过评审才能进入Git仓库。Gerrit是Android社区的评审系统,有很严谨的工作流,适合于那些关注代码质量的团队。持续集成,也就是代码入库后,会有服务器自动编译代码,运行单元测试,产生报表,打包并安装。这里面包含大量的技术细节。下面有个使用场景:
程序员A编写一个Java的库,经过代码评审后入库,一台Jenkins服务器发现代码已经更新,自动从Git中获取最新代码,进行编译。这个Java库采用Maven构建,因此编译后可以运行测试用例,进行代码静态扫描(使用Checkstyle、PMD、FindBugs),并将测试结果,代码扫描结果,
测试覆盖率等生成HTML报表发往报表服务器。如果测试通过的情况下,编译后的jar包会被部署在Nexus服务器上,供其他程序使用。
程序员B正在开发一个Web程序,也是通过Maven构建自己的工程,通过Maven的依赖管理很容易的就将Nexus服务器上的A写的jar包引入到自己的工程使用。当B的程序通过评审进入代码仓库,Jenkins服务器获取最新代码进行构建,同样进行代码扫描,运行单元测试,然后负责将war包远程部署到一台web服务器上用于并发测试。
程序员C正在***一个安装包,他编写脚本安装web服务器和B的程序,以及其他一些产品需要的程序和文档。他所有的脚本和文件也会被提交到代码仓库中,Jenkins服务器检查到更新后会获取并运行一些事先编写的脚本执行复制文件,创建压缩包的工作。然后通过SSH公钥方式自动的登录到一台运行KVM的Linux机器上,将其中的一个虚拟机恢复到某个测试状态。再登录到这个虚拟机上,安装这个压缩包。
当一切都自动化的完成后,经理和工程师们都可以通过浏览器访问虚拟机,来检查产品的功能,通过报表系统来检查代码是否规范,测试是否通过。这个自动化过程其实是跨语言的。Java社区在这方面特别成熟,提供了很多有用的工具,因此我们先在Java开发中广泛使用。同时我们也已经用于JavaScript语言,还打算集成C++项目。另外,Esri工程师分布在全球各地,数量众多。因此我们正在建设基于GitLab的公司内部的Social
coding模式,让工程师们像在社交网站上一样看到其他工程师的工作,并分享自己的工作。
陈抒:Esri北京研发中心的总经理Moxie先生来自美国,因此按照那边的标准要求软件研发过程。项目管理采用Scrum敏捷方法,强调工程师的自我管理。我主要介绍一下我们的代码评审系统和持续集成系统。
首先我们使用Git进行代码管理,不同于VSS、CVS、Subversion,这是个分布式版本系统,功能极其强大,但是学习成本高,原理和使用技巧复杂。在此基础上,采用了Gerrit进行用户权限管理和代码评审管理,程序员的代码只有经过评审才能进入Git仓库。Gerrit是Android社区的评审系统,有很严谨的工作流,适合于那些关注代码质量的团队。持续集成,也就是代码入库后,会有服务器自动编译代码,运行单元测试,产生报表,打包并安装。这里面包含大量的技术细节。下面有个使用场景:
程序员A编写一个Java的库,经过代码评审后入库,一台Jenkins服务器发现代码已经更新,自动从Git中获取最新代码,进行编译。这个Java库采用Maven构建,因此编译后可以运行测试用例,进行代码静态扫描(使用Checkstyle、PMD、FindBugs),并将测试结果,代码扫描结果,
测试覆盖率等生成HTML报表发往报表服务器。如果测试通过的情况下,编译后的jar包会被部署在Nexus服务器上,供其他程序使用。
程序员B正在开发一个Web程序,也是通过Maven构建自己的工程,通过Maven的依赖管理很容易的就将Nexus服务器上的A写的jar包引入到自己的工程使用。当B的程序通过评审进入代码仓库,Jenkins服务器获取最新代码进行构建,同样进行代码扫描,运行单元测试,然后负责将war包远程部署到一台web服务器上用于并发测试。
程序员C正在***一个安装包,他编写脚本安装web服务器和B的程序,以及其他一些产品需要的程序和文档。他所有的脚本和文件也会被提交到代码仓库中,Jenkins服务器检查到更新后会获取并运行一些事先编写的脚本执行复制文件,创建压缩包的工作。然后通过SSH公钥方式自动的登录到一台运行KVM的Linux机器上,将其中的一个虚拟机恢复到某个测试状态。再登录到这个虚拟机上,安装这个压缩包。
当一切都自动化的完成后,经理和工程师们都可以通过浏览器访问虚拟机,来检查产品的功能,通过报表系统来检查代码是否规范,测试是否通过。这个自动化过程其实是跨语言的。Java社区在这方面特别成熟,提供了很多有用的工具,因此我们先在Java开发中广泛使用。同时我们也已经用于JavaScript语言,还打算集成C++项目。另外,Esri工程师分布在全球各地,数量众多。因此我们正在建设基于GitLab的公司内部的Social
coding模式,让工程师们像在社交网站上一样看到其他工程师的工作,并分享自己的工作。
相关文章推荐
- 转载一篇介绍cocos2d开发工具的文章
- 转载一篇仅就其中一段话来迁强说明人工智能在思维与潜意识之间的关联
- 转载一篇关于 web报表工具设计 的文章
- 常见的PCB工具软件介绍【转载】
- SQO2008R2配置管理工具服务显示远程过程调用失败 ---转载
- (转载一篇)Windows7与ArcGIS Desktop9.3冲突问题解决(由QQ安装问题引出)(经本人验证已解决)
- smartctl工具应用(转载整理)
- 一篇不错的讲解Java异常的文章(转载)----感觉很不错,读了以后很有启发
- 转载一篇MySQL读取缓存的文章
- (转载的一篇文章)美团和饿了么的产品对比
- 【转载】使用“猴子”测试工具
- 转载一篇Eclipse.org的文章
- 华为boss力荐公司高层看的一篇文章,真的很经典!!![转载]
- 获取项目在服务其中的真实路径的工具类
- 7.10 有一篇文章,共有3行文字,每行有80个字符。要求分别统计出其中英文大写字母、小写字母、数字、空格以及其他字符的个数。
- 十大常用多核程序编写工具_转载
- 这几天和侯捷在一起,转载一篇以前他对程序人生的看法,以示支持
- 转载:移动应用加密工具解析
- 需要知道的 16 个 Linux 服务器监控命令/工具(转载)
- 看到的一篇文章 觉得不错 转载....