702
社区成员
发帖
与我相关
我的任务
分享

这个页面的信息主要来自/data/qzone_build/source下的每个目录下的buildres.xml,
通过第一列各个日期的连接可以进入查看相应的编译目录,通过查看详细信息,可以了解具体的编译情况:
4
上图页面的信息主要来自各个目录的ccversion.xml文件,ccversion.xml文件本身不会出现在列表中.
上图页面的信息来自相应的buildres.xml
注:由于源码目录下文件可能会被手工增删或改动,有时有些信息文件无法正确读取,这时php会发出警告,这些都是可以忽略的,可以通过/usr/local/lib/php.ini改变php的告警级别(仅显示错误):
error_reporting = E_ERROR
2. 关键工具的使用说明
2.1. svntools.pl的用法
用途: 拉取svn工程源代码的工具脚本.
配置文件: svntools.conf, 需要和svntools.pl放在同一个目录下, 其中设置远程SVN服务器的连接信息(IP,USER,PASSWD等).
使用方法: svntools [[-i|-u] local_directory|local_file]|[-e]|[-h]
-i local_directory|local_file 显示目录或文件在远程和本地的版本信息;
-u local_directory|local_file 更新本地目录或文件;
-e 查看或编辑配制文件;
-h 显示帮助信息.
注意: 命令行中的目录和文件参数支持相对和绝对路径;路径字符串中不支持通配符(*)和正则表达式.
其中srcroot定义了本地的源代码更新位置和远端svn地址, -i, -u选项后边的文件路径都应该在srcroot以内.
使用[svntools.pl -u 目录名]更新时不会删除服务器上不存在而在本地存在的目录内部文件;但使用[svntools.pl -u 文件名]时会做删除. 如果文件以及父目录都在服务器上不存在,只会删除文件而不会删除父目录.
cctool.pl –i 文件名可以比较本地文件和服务器上相应文件的CC信息,输出内容分两行显示,分别以L和S开头,L (local)代表本地文件信息,S (server)代表服务器端文件信息
2.2. setroot.sh的用法
用途: 设置更新和(或)编译目录的软连接
使用方法: setroot.sh[-b][-u][-d date|-p directory [-f]][-h]
-b set build source root
-u set update source root
-ddate use /data/qzone_build/source/qzone_$dateas base dir (fmt: YYYYMMDD)
-pdir use specified directory as basedir
-f use with -d or -p, force createdirectory if not exists
-h show help information
说明: 如果没有(用-d或者-p)指定具体目录,则会使用当天的日期当作-d的参数,即缺省采用–d + 当天日期
-f选项会在 –d或者-p指定的目录不存在时创建目录
-b会将指定的目录软连接到/usr/local/qzone_v3.0; -u会将指定的目录软连接到/data/qzone_build/temp/src
2.3. confgen.pl的用法
用途: 根据makefile生成make.conf
使用方法:confgen.pl [-i original_makefile|-o outputfile_confile] [-h hint_file]
-i original_makefile, original makefile tobuild conf file;
-o outputfile_confile, name of output makeconfig file;
-f hint_file, a file in which includedefault conf values;
-h, print help messages.
说明: 缺省的输入文件是/usr/local/qzone_v3.0/makefile, 但可以通过-i选项指定输入文件;缺省的输出文件是/usr/local/qzone_v3.0/make.conf, 但可以通过-o选项指定输出文件; -f 用来指定缺省配置所在的文件,如果不指定的话,则会尝试使用confgen.pl同一目录下的make.conf.def,其中可以指定编译目录的依赖关系,以及包括,排除列表的缺省值,这些值会合并到最终生成的make.conf文件中(参见mkgen.pl的用法说明)
2.4. mkgen.pl的用法
用途: 根据make.conf生成全构建脚本build.sh
使用方法: mkgen.pl [-i include_list|-e exclude_list][-h] [-f hint_file] source_directory
-i include_list, ';' splited list forinclude sub_dirs;
-e exclude_list, ';' splited list forexclude sub_dirs;
-f hint_file, a file in which listinginclude/exclude sub_dirs;
-h, print help messages.
说明: 不一定要使用make.conf文件,(但是如果在没有用-f 明确指定配制文件名,而/usr/local/qzone_v3.0/make.conf存在,则会尝试使用它), 可以在命令行中通过 –i,-e指定参加构建的或者不参加构建的子目录(如果-i,-e指定了同一个目录,则以-e为准)
make.conf一个很重要的用途是用来指明编译中的依赖关系,帮助确定编译顺序,下边是一个例子:
[order]
platform/src/comm=16
comm=8
platform=4
main=2
[include]
portal/src/fcg
blog/src/blog
music/src/discuss/fcg
main/src/mall
izone/src/favor
其中order一节定义了不同目录的优先级,数值越大越先编译,(也就是说,越多的其他的代码依赖于它).
优先级的设置使用目录关键字=级别的形式定义,当目录中包含关键字时(同一个关键字多次出现仅计算一次),会将相应的级别加到该目录的总级别,最终的编译脚本build.sh会按照各个目录的级别由高到低依次编译(级别相同的目录意味着他们之间的编译顺序不影响结果,因此只按照目录字母顺序做简单排序), 不含关键字的目录级别为0, 比如:
platform/src/comm 级别 16
platform/src/c5a/c5atool 级别 4
main/src/comm 级别 10
blog/src/comm 级别 8
izone/src/favor 级别 0
music/src/comm 级别 8
建议使用2的幂做为级别的数字,以便拉开差距,防止低级别的目录级别相加后超过更优先的级别.
mkgen.pl每次生成的build.sh都有一个不同的时间戳(选用当前系统时间),这个时间戳相当于build.sh的版本,不同版本的build.sh生成的log文件名不同,这些log的名称格式是: build_***.log其中***就是它的时间戳
2.5. writemail.pl,postmessage.pl的用法
用途: 这两个工具脚本联合起来完成邮件通知编译结果的功能.它们应该放在同一个目录下,并且还会在同一目录下寻找message.conf文件,其中包含发送邮件配制信息,例如:
[server]
ip=192.168.?.?
user=qzonebuilder@tencent.com
port=25
[local]
msgbox=/data/qzone_build/temp/mbox
其中msgbox指定了发件箱的位置,writemail.pl缺省会将新建的邮件放进这里.
l writemail的使用方法: writemail.pl [-i build resultfile] [-h] [-o output mail file]
-i build result file's path & name
-o output mail file's path & name
-h print help messages
说明: 如果没有用-i 指定编译结果文件,则尝试使用/usr/local/qzone_v3.0/buildres.xml,如果没有用-o指定生成的邮件的存放位置,则会根据build.sh的时间戳生成一封名为build_$timestamp.mail的文件放进message.conf中定义的msgbox中.
l postmessage.pl的使用方法: postmessage.pl [-fmessage_box|message_file ]|[-a]|[-e]|[-h]
-f message_box|message_file 指定邮箱路径或者邮件文件名,邮件文件必须以.mail做为名称后缀
-a 自动发送缺省配置的邮箱内的所有邮件和消息;
-e 查看或编辑配制文件;
-h 显示帮助信息.
3. crontab使用说明
3.1. crontab脚本
工程编译crontab脚本:
工程清理crontab脚本(保留一天的工程):
每天的译结果汇总邮件:
至此整个过程结束!