补丁包管理办法
名词术语
1、 补丁包:由公司统一规划版本的补丁程序。
2、 临时补丁包:由紧急任务引起,临时发布的补丁程序。
角色和职责
1、 产品经理:
( 负责版本规划、版本范围变更,制定总体目标和计划。
2、 版本经理:
( 负责补丁包的开发、测试、补丁包生成等工作,制订详细的工作分解计划。
3、 发布管理员:
( 负责补丁包开发过程中发布测试版本。
补丁包命名
1、 基线版本命名格式为:
项目名称V版本号,例:ifmisV1.6
2、 补丁包命名格式为:
项目名称V版本号SP编号,例:ifmisV1.6SP01
3、 临时补丁包命名格式为:
项目名称V版本号SP编号_L编号,例:ifmisV1.6SP01_L01
整体流程
版本规划
1、 产品经理(指开发部门经理)收集需求和缺陷,并组织对需求和缺陷的评审,形成评审结果,具体分为:
(1)接收并指定实现版本;
(2)拒绝同时给出拒绝原因;
2、 产品经理根据公司、客户等多方面的要求,制定每个版本的开发周期,并指定版本经理。版本经理根据每个版本的开发范围合理安排开发、测试计划,如有变化,请及时和产品经理沟通以便进行版本开发范围或计划的变更。
补丁的开发、测试
1、 补丁包
(1) 将补丁包开发作为一个项目,由产品经理指定版本经理负责补丁包的开发、测试、补丁包生成和
申请
关于撤销行政处分的申请关于工程延期监理费的申请报告关于减免管理费的申请关于减租申请书的范文关于解除警告处分的申请
发布工作。
(2) 补丁包的开发、测试、补丁包生成和申请发布工作由版本经理负责组织制定详细的工作分解计划。
(3) 补丁包的测试版本发布由版本经理指定版本管理员负责,发布测试版本时要合并与上一个补丁包之间的所有临时补丁。
(4) 测试完成后版本经理组织将分支合并到主干,解决冲突后生成补丁包。
(5) 补丁包采用兼容性补丁模式,即:补丁包均是基于trunk的增量包,后面的补丁兼容前面的补丁。(与兼容性补丁相对应的就是独立补丁,补丁包均是基于trunk的增量包,后面的补丁不兼容前面的补丁,各个补丁间是独立的;)
注:制作增量补丁包的方法见附件2
2、 临时补丁包
(1) 由开发部经理指定人员负责开发。
(2) 开发完成后提交质量部测试。
(3) 测试通过后发布临时补丁包。
Svn目录结构和合并说明
1)svn目录结构说明
(1) 项目过程资料由code、database和doc三部分组成。其中code用于存放项目代码和发布的程序;database用于存放数据库备份;doc用于存放项目过程中产生的文档。
(2) code又分为Trunk、branches和tags。
( trunk为主干,用于存放稳定版本的源程序、合并分支和发布补丁包。
( branches为分支,用于开发。
( tags分为release、test、sourcefile,其中release用于存放批准发布的补丁包(可执行文件);test用于存放测试版本;sourcefile用于存放全量的源文件。
2)版本合并
(1) 上图中1、2表示从V1.6做分支到branches进行开发;
(2) 3、6表示补丁开发完成后分支到tags/test中进行测试(不进行任何合并);
(3) 4、7表示分支测试完成合并到主干解决冲突,其中4是将v1.6和sp01合并;7是将v1.6+sp01和sp02合并,
(4) 5、8表示将合并后的主干生成测试分支进行测试。
(5) 如果两个分支开发完成时间接近,则进行版本变更,两个分支合并到一起发布。
合并的具体操作说明见附件1“利用SVN进行合并操作说明”
补丁发布和管理
(1) 补丁生成之后版本经理通过jira提交发布申请到质量部,质量部进行审批。发布申请中要包含以下内容:
( 补丁安装操作说明书
( 补丁更新说明书
( 补丁程序
( 数据库脚本
( 测试报告
备注:为保证补丁包的通用性,补丁安装操作说明书中不涉及系统功能的配置,仅描述如何打补丁;数据库脚本仅针对通用的数据库调整(指数据库对象,包括表、视图、函数、存储过程等)的增删改,不涉及具体系统功能的配置,具体功能的配置通过“XXX特性指导书”来解决。
(2) 审批通过后质量部负责上传到tag/release目录,由版本经理将主干做分支到tag/sourcefile目录下。
(3) 质量部发送补丁包给技术服务部,由技术服务部上传到财政局内网网站。
(4) 技术服务部通知客户服务部补丁上传完成,由客户服务部发布通知。
补丁内容培训
补丁包发布之前(或之后),开发部门要对市场部和客户服务部进行业务培训,便于市场部和客服部进行市场推广和运维服务。
附件1 利用SVN进行合并操作说明
一、 在讲述利用SVN进行版本合并前,先简单描述如何利用SVN创建分支。
1、 在trunk目录下点击右键,选择“tortoiseSVN>分支/标记”弹出下图
2、 在至URL中填写分支的目标地址,填写日志,点击确定创建分支完成。更新一下branches即可。
3、 依据上述方法可以创建其他分支,如SP02、SP03。
二、 合并sp01
1、 在sp01中修改了1.txt,新增了6.txt文件。
2、 将sp01合并到主干上,参见下图:
在trunk的工作副本(个人机器上的TRUNK的副本)目录下,选择“tortoiseSVN>合并”弹出下图
选择合并类型,使用第一个“合并一个范围版本”
选择合并的源URL(即sp01地址),点击显示日志,选择要合并版本的范围。
选择“测试合并”弹出下图。可以看到新增了6.text,更新了1.txt。点击上图中的“合并”,完成sp01合并到主干。经过仔细验证合并结果,如果符合预期,可以将合并后的trunk的工作副本提交到svn上。
三、 Sp02合并到主干
1、 sp02中修改1.txt,与sp01中修改的不同。新增7.txt。删除2.txt文件。
2、 重复sp01的合并过程,到“测试合并”。见下图
合并中提示文件冲突,点击“合并”,弹出下图
选择“编辑冲突”
开发人员协商解决冲突,将两个文件不同的地方合并。右键中有合并功能,合并后点击“保存”,如下图。
冲突解决后,点击“解决”即可。如下图:
3、 通过svn无法解决的冲突,请开发人员协商手工解决。
附件2 增量补丁包的制作方法
1)利用SVN找出两个版本间的差异
目前我们创建分支branch/标识TAG时均使用SVN的功能“分支/标记(T)”,通过该方式能利用SVN的“版本分支图”很好地知道版本间的关系,梳理版本树图。示例见下面两个图。
比较两个版本的差异方法如下:
进入某个分支后,查询“日志信息”,按住CTRL来选择两个版本,
然后点击右键中的“比较版本差异”,弹出如下界面
从而可以获得版本差异列表。
2)根据版本差异列表制作补丁打包的批处理文件
格式如下:
解释如下:
第一行:REM是注释的标志
第二行:切换到E:盘
第三行:切换到E:\ifmistest\branches\update20140702目录下
第四行:该行为关键点。Jar命令后面的选项(-cvfM)区分大小写,文件列表虽不区分大小写,但我们要求必须对大小写敏感,与实际编译后的文件名“完全”一致。命令格式为:
jar -cvfM 目标JAR包名称 需要打包的文件列表(中间以空格隔开)
备注:xxx.java进行编译后一定会生成xxx.class还有可能生成多个内部类xxx$内部类名称.class。所以打包XXX*.class的文件,包括了所有以xxx开头的class文件,即包括xxx.class,xxx$内部类名.class,还包括其他以xxx开头的class文件(该类文件不应该打包到增量包的补丁中,但打进去也不会有什么问题,因为这类文件本来就是补丁的基础版本中的类文件)。