【转】产品配置管理操作规范
1. 开发库结构规范
1.1. 概述
本规范用于指导SCM经理创建开发库,保证开发库结构的通用性。
1.2. 开发库结构规范
开发库结构参考《开发库结构模版.zip》。
2. 帐号命名规范
2.1. 概述
本规范归纳总结了配置管理过程中配置库的帐号命名规范。便于SCM工程师进行及时查询,保证用户帐号的唯一性和易用性。
2.2. 开发库帐号命名规范
开发库帐号的命名,主要依据用户的邮箱而定,根据邮箱不同而略有变化,每个用户的帐号名称统一为英文小写。如下:
将邮箱域名中@变为“.”(不包括引号),然后作为cvs的登录帐号名称。
例1:用户,李四
邮箱为,lisi@***.com
帐号为,lisi.***.com
例2:同名用户,李四
邮箱为,zblisi@***.com
帐号为,zblisi.***.com
2.3. 交付库帐号命名规范
1. 与开发库的帐号名称要保持一致;
2. 与开发库命名规范相同;
2.4. sympa帐号命名规范
1. 以对应开发库名字作为帐号开头;
例1:开发库是scm
sympa帐号为,scm@scm5.***.cn,scm-dept@scm5.***.cn等
2.5. bugzilla帐号命名规范
1. 每个用户以工作邮箱作为帐号;
2.6. rt帐号命名规范
1. 每个用户以工作邮箱作为帐号;
2.7. tcedit帐号命名规范
1. 每个用户以工作邮箱作为帐号;
2.8. vpn帐号命名规范
1. 与开发库的帐号名称要保持一致;
2. 与开发库命名规范相同;
3. 帐号需直属总监批准才能开通;
2.9. 帐号密码命名规范
1. 用户的帐号密码是由数字和字母随机生成的。例如:A86345、dFd438、7yue3s;
2. 密码中不能包括“:”“@”等特殊符号;
3. 每个帐号的密码是唯一的。
2.10. 集团邮箱清单
3. 帐号权限管理规范
3.1. 概述
公司为每个产品建立对应的开发库、交付库,为了便于管理项目组不同成员对配置库的访问权限,SCM工程师需要根据此规范进行操作。
3.2. 帐号权限管理规范
1. SCM经理在完成配置库的创建后的1个工作日内,给项目经理、产品经理,业务领域总监、QA工程师开通相关的配置库帐号,并发出“新建配置库的创建通知”或“不采用默认结构配置库的创建通知”或“新项目使用原有配置库的创建通知”邮件通知;
2. 产品经理、项目经理从开发库获取《配置库结构及权限表》,将相关帐号、权限信息填入其中。完成后,将《配置库结构及权限表》作为邮件附件发给SCM工程师;
3. SCM工程师应在收到邮件后的1个工作日内,完成帐号开通工作,发送“全体人员帐号通知”邮件给项目经理,同时抄送给帐号持有者、本领域总监、和QA工程师;
4. 对于帐号、密码详细信息,SCM经理或SCM工程师须发送“CVS个人帐号通知”和(或)“FTP个人帐号上传权限通知”和(或)“FTP人帐号下载权限通知”单独邮件通知给各帐号持有人。
5. 在某些特殊情况下,SCM工程师可以根据口头通知开通帐号、权限,但需同步更新《配置库结构及权限表》;
6. SCM工程师需要长期保留收到、答复的开通、变更帐号、权限信息的相关邮件,存档备查。
3.3. 权限的基本规则
1. 权限按目录分别定义,避免对具体的文件定义权限;
2. 权限按角色划分为权限组,不同的权限组有不同的权限,避免组与组之间权限相同;
3. 不同的权限组有不同文档、源代码目录的权限,避免某个权限组有所有文档或源代码目录的权限;
4. SCM工程师新建配置库时,提交的《配置库结构及权限表》中的权限信息是依照以上规则定义的默认权限,项目经理可以根据配置库的具体情况略做修改,但需符合以上规则;
5. SCM工程师在开通、变更权限时,需检查是否符合以上规则,不符时需及时反馈确认。
6. 开发库的权限一般不要超过三级目录。
4. 邮件列表管理规范
4.1. 概述
通过邮件列表将公司各邮箱用户按所在项目组的不同进行分组,类似于群发邮件的功能,它提供便捷的项目团队沟通方式。
4.2. 邮箱地址规范
邮件列表只用于集团内部沟通,邮件列表中的邮箱地址只允许使用集团邮箱。集团邮箱清单参见2.5节。
5. 版本管理规范
5.1. 概述
按照一定的规则保存配置项的所有版本记录,避免发生版本丢失或混淆等现象,并且可以快速准确的查找到配置项的任何版本。
5.2. 源代码的版本命名规则
1. 一般格式:“英文项目名或模块名.项目版本.流水号”。
其中,项目版本格式:“主版本号.子版本号[.修正版本号]”;
例如:
webshop.3.0.2.1。其中,webshop,是英文项目名;3.0.2,是项目版本;1,是流水号;
webshop.3.0.2.12。其中,webshop,是英文项目名;3.0.2,是项目版本;12,是流水号。
2. 维护项目格式:“英文项目名或模块名.维护项目版本.流水号”。
其中,维护项目版本格式:“{sp|fix|hotfix|…}主版本号”;
例如:
***.sp1.1。其中,***,是英文项目名;sp1,是维护项目版本;1,是流水号。
5.3. 文档的版本命名规则
1. 一般格式:“v.项目版本.流水号”;
其中,项目版本格式:“主版本号.子版本号[.修正版本号]”;
例如:
v.3.0.2.1。其中,v,是固定前缀;3.0.2,是项目版本;1,是流水号。
2. 维护项目格式:“v.维护项目版本.流水号”;
其中,维护项目版本格式:“{sp|fix|hotfix|…}主版本号”;
例如:
v.sp1.1。其中, v,是固定前缀;sp1,是维护项目版本;1是流水号。
5.4. 版本的TAG标识
1. 源代码和文档的版本号在开发库中用tag进行标识,由于CVS规定tag中不能有“.”,因此,版本中的“.”在tag中用“-”替换;
2. 一般格式:“英文项目名或模块名-项目版本-流水号”、“v-项目版本-流水号”;
其中项目版本格式:“主版本号-子版本号[-修正版本号]”
例如:webshop-3-0-2-1、webshop-3-0-2-12、v-3-0-2-1。
3. 维护项目版本格式:“英文项目名或模块名-维护项目版本-流水号”、“v-维护项目版本-流水号”;
其中维护项目版本格式:“{sp|fix|hotfix|…}主版本号”
例如:***-sp1-1、v-sp1-1。
6. 自动编译操作规范
6.1. 概述
为保证开发库中源代码与交付库中程序包的一致性,提高源代码的编译效率,SCM工程师需要依据此规范进行自动编译的操作。
6.2. 确定编译信息
SCM工程师需根据《项目编译手册》、《虚拟机清单》的内容确定编译机、编译工具、编译所需环境变量等信息。
6.3. 搭建自动编译客户端编译环境
搭建客户端编译环境主要针对环境变量的配置,和编译工具的安装。
例如,编译信息中指定安装apache-ant-1.6.5,定义环境变量ant1.6.5:
1. 在编译机器上安装此程序;
2. 找到cc-agent的安装文件夹,以记事本的形式打开start.bat,并填写一条环境变量记录:set ant1.6.5=e:apache-ant-1.6.5;
6.4. 建立builder用户
SCM工程师建立builder用户到该项目,并分配到BD权限组里面,便于编译系统能通过builder用户获取源代码。
修改tagcheck文件,便于自动锁定自动编译标记的源代码tag。
tagcheck文件示例如下
#! /bin/sh
# TAG add/mov/del repo files...
# $1 $2 $3 $4 ...
case "$1" in
v-*)
case "$CVS_USER" in
zbwangjian | fengcui)
exit 0 # ok;;
*)
echo "$CVS_USER does not have permission to perform this tag operation!" 1>&2
exit 1;;
esac;;
DataCenter-*)
case "$CVS_USER" in
builder)
exit 0 # ok;;
*)
echo "$CVS_USER does not have permission to perform this tag operation!" 1>&2
exit 1;;
esac;;
*)
exit 0 # not reserved, ok.;;
esac
6.5. 配置自动编译服务器端环境
自动编译客户端环境变量及工具配置完成后,开始对自动编译服务器端进行配置。
1. 首先,进入到自动编译服务器端的如下目录:
$cd /cruisecontrol/projects/project11/
在该目录中可以看到两个xml格式的模版:0linux.xml和0windows.xml分别针对linux系统的编译机和windows系统的编译机。根据实际编译机系统情况进行选择复制,并将名称修改为“英文项目名或模块名-项目版本.xml”的形式,名称开头必须和开发库名称一致,以保证tag锁有效。
以0linux.xml为例,介绍一下如何修改配置文件。
(“*”号处为需要修改的内容,“#”号后为注释)
<?xml version="1.0" encoding="GBK"?>
<cruisecontrol>
<project name="***" buildafterfailed="false"> #英文项目名或模块名-项目版本,如***-1-0
<property name="module" value="***/***"/> #编译脚本所在目录
<property name="module2" value="***/***"/> #检出到本地的编译脚本所在目录(windows注意斜杠方向为“”)
<property name="ftp2.dir" value="/repository/ftpdata/***/Output/${project.name}"/> #项目配置库名称,比如cvstrain
<property name="tag" value="***"/> #系统集成工程师打上的tag号,为了便于记忆,取编译脚本名称中“.”的前缀作为tag号,例如:编译脚本名称是“build.sh”,tag就是“build”
<property name="buildfile" value="***.sh"/> #编译脚本名称,例如:build.sh,windows为build.bat
<property name="cvsroot" value=":pserver:builder:***@scm3.***.cn:/repository/***"/> #输入所建立builder的密码
<property name="agent" value="agent.name=***"/> #编译服务器的agentname,可以到《虚拟机清单.doc》中查询到
<property
name="buildresultsurl" value="http://scm3.***.cn:8080/cruisecontrol/buildresults/${project.name}"/>
<property name="mailto" value="***@***.cn"/> #执行编译操作人员的邮件地址,若有多人需接收时,使用邮件列表
<property name="mailhost" value="mail.***.cn"/>
<property name="returnaddress" value="cruise@mydomain.com"/>
2. 然后,返回上一级目录,配置config.xml文件。
该文件信息如下:
<cruisecontrol>
<property name="cruise.dir" value="/opt/cruisecontrol-2.7.1"/>
<property name="jetty.dir" value="/opt/jetty-6.1.6"/>
<property name="log.dir" value="${cruise.dir}/logs/${project.name}"/>
<property name="checkout.dir" value="${cruise.dir}/checkout/${project.name}"/>
<property name="output.dir" value="${cruise.dir}/output/${project.name}"/>
<property name="ftp.dir" value="/repository/ftpdata/${project.name}/Output" />
<property name="status.file" value="${log.dir}/status.txt"/>
<pluginname="distributed" classname="net.sourceforge.cruisecontrol.builders.DistributedMasterBuilder"/>
<pluginname="labelincrementer" classname="net.sourceforge.cruisecontrol.labelincrementers.CVSLabelIncrementer"/>
<include.projects file="${cruise.dir}/projects/***"/> #项目xml文件的路径
<system>
<configuration>
<threads count="20"/>
</configuration>
</system>
</cruisecontrol>
至此,编译环境配置完成。
6.6. 显示编译项目记录
打开cruisecontrol编译页面,例如http://scm1.***.cn:8080/cruisecontrol5/,并没有新建的编译项目记录,此时,应该先点击预先设计好的一个测试项目工程,例如cvstrain-win-5-0,点击build按钮,触发后就看到了刚新建的编译项目记录。
6.7. 记录编译环境信息
编译环境搭建完成后,
1. SCM工程师记录编译环境信息到《项目基线记录表》中;
2. SCM工程师回复邮件“自动编译通知”给系统集成工程师;
3. 系统集成工程师按照邮件中提示进行操作,给需要编译的代码打约定的tag号,然后登陆相关页面进行编译工作。
注意:
1. 如果该项目并非第一次进行自动编译,可以简化以上操作:
SCM工程师检查《项目编译手册》和前序版本的《项目编译手册》,如果编译环境说明相同,就可以仅对自动编译服务器端配置新的编译项目记录。
首先,进入到自动编译服务器端的如下目录:
$ cd /cruisecontrol/projects/
在该目录中可以选择该项目的前一版本的xml文件作为模板,进行复制,并将名称修改为此次项目的版本名称,形式为“英文项目名或模块名-项目版本.xml”。
进入该配置文件,修改project name为本次项目名称,如果没有特殊说明,其他都同之前版本,配置完成后,保存退出。
然后,返回上一级目录,配置config.xml文件。复制前一版本的include节点信息,并修改xml文件名字为上面修改的.xml文件的名字即可。
l 搭建完成后,SCM工程师回复邮件“自动编译通知”给系统集成工程师。
2. 编译过程中,若有问题,SCM工程师需及时协助编译人员解决问题,直至编译成功;
3. 自动编译系统故障、网络故障等情况,暂时无法使用自动编译时,SCM工程师要以邮件方式通知相关QA和SCM经理,获得批准后,由SCM工程师根据系统集成工程师提供的tag号,按规范标注新的tag号,手动编译,手动上传至交付库(FTP)上,交付库目录的规则为:最后成功自动编译tag号-*(*为字母a,b,c…),比如:VOMS-1-1-7-a,VOMS-1-1-7-b
4. 经批准暂不采用自动编译的项目,由系统集成工程师或SCM工程师手动编译,由SCM工程师手动上传至交付库(FTP)上,交付库目录的规则为:tag号-a,比如:VOMS-1-1-7-a,VOMS-1-1-8-a;记录不采用自动编译的原因到《项目基线记录表》中,比如:经批准不做自动编译