buildhome搭建环境解决方案-阿里云开发者社区

开发者社区> 开发与运维> 正文

buildhome搭建环境解决方案

简介:

成功部署产品线

百度目前质量部共不下20条产品线,已有过半产品线使用buildhome进行搭建环境,并将于自动化测试结合起来,可以随时在跑脚本测试时候搭建环境。

环境搭建背景

在百度内部的不同产品线下,搭建一套环境主要包括:程序、配置项、数据三项内容。其中配置文件和数据的区分界限并不明显,可灵活变通,基本不会变的配置文件可以为一个数据,数据如果是明文且符合某一定格式也可以为配置文件。
困难在于:程序和配置项和数据需要统一版本,只有这统一才能够保证上下游程序接口一致,程序读取数据接口一致和功能点的展示一致,整个系统功能才能完整工作,其中配置文件中的配置项中还包括与下游模块的关联关系。
现状是:测试环境多,多套测试环境维护各不相同版本,每一套测试环境未能及时升级版本导致新项目测试使用的环境不是基线版本,每次进行更新都是到线上下载配置文件和程序,拷贝下来配置文件直接使用存在测试连上线上风险,调试和判断测试环境数据是否匹配需要非常大的投入。

 

buildhome介绍

你们搭建环境是否遇到与我们产品线类似的困扰?是否由于环境问题导致项目质量的问题?每次部署一套测试环境都要修改很多配置项,特别是其中的IP信息和数据依赖关系是不是很烦?或许,buildhome能够解除你的困扰!

 

buildhome能干什么?

1.快速帮你搭建一套完整环境或者自定义的环境,包括程序、数据、模板、配置项信息。
2.通过参照环境(例如线上环境)进行监控模块配置项、程序md5、固定数据信息,提供监控报警功能
3.管理模块与模块的关联关系,配合线上(或提供的)配置项,完整生成一份适合线下使用的配置文件,无需手工更改。使用人员几乎可以不关注模块的配置文件进行搭建一套环境
4.管理模块与数据的关联关系,集中管理当前版本的数据部署,使得更新时候可以同步更新
5.定时更新监控程序md5、配置文件、数据md5,不至于环境与线上同步失效。
6.提供数据、程序、配置文件的项目版本管理,可以方便回滚到不同项目的版本系统中。

 

buidhome主要功能--管理关联关系


我们的一套测试环境中有多个模块,这些模块可能需要与一个或多个上游或者下游模块进行交互,从而形成了网状结构,如图所示:

 

在实际部署的时候,我们往往将这些模块分成多个组。从而部署到多个服务器,进行快速搭建,比如MachineA,MachineB和MachineC上,例如:



我们希望能够很方便地将这样一套环境迁移到另外一套服务器,比如MachineA,MachineD和MachineE上,例如:



同时,我们也需要能够很方便的将一套环境中的模块重新分组并部署到相应服务器上,例如:



在以上操作中,各个模块之间的关联关系并没有改变,因此配置人员一旦把关联关系给找到并且配置关联上,无论怎么部署一套环境在不同机器上,可以由工具实现协助找到当前搭建模块和下游所在的机器,这些模块就能相互协同工作!

buildhome一个重要功能正是维护了各个模块之间的关联关系,从而使你能够方便的实现环境的迁移和环境内模块的快速搭建和重新分组部署。
其基本思想是把配置文件中涉及的配置项的取值值等用变量来表示,从而把关联关系抽象出来,通过当前环境的一个配置,与测试机器的IP,NAME等信息进行实例化,实现关联关系的抽象。Buildhome在搭建环境过程中进行识别,并转换其取值为下游模块的IP或其他值,实现动态关联。
在某一些模块中,可能出现一个程序对应多个配置文件或者没有配置文件情况,buildhome都进行了支持,并且对于百度内部的主流的配置文件格式都进行支持。

 

buidhome主要功能--管理数据(包括模板)与程序关系


在百度内部的很多产品线中,程序和数据有严格的对应关系,缺少某部分的对应关系的数据(例如检索系统缺少一份字典文件),程序不能够启动或者启动后出现功能不正常的情况,如果想要快速搭建个完整的环境,必须把程序版本与数据的关系管理起来。
数据的维护需要人为进行,否则不能够完全管理一整套环境,导致buildhome搭建起来的系统可能有程序、数据的不一致!
对于数据维护方面,buildhome提供更新环境的客户端进行操作。更新客户端如下:

 



拼装页面模块的页面模板是一个比较特殊的数据,下载下来的数据还需要进行线上url的替换,与程序也是一个对应关系,需要做的操作是下载下模板进行执行模板替换脚本的操作。
在域名替换方面,现阶段存在很多个替换脚本和替换域名列表,并且每一个替换列表信息不一定完全同步,在一个项目上线新增了一个域名时候,通知其他替换脚本需要代价,buildhome完全管理了模板域名替换部分,每一台机器进行同步,统一替换脚本,测试人员可以不用理会历史版本的域名替换问题,buildhome内部实现同步。 
程序与数据的关系是一个很简单的一对多的关系,配置过程中需要把数据和所在路径配置上即可进行工作。
buidhome主要功能--管理程序版本 
程序版本管理使用是简单的与线上版本同步的操作,每天在流量低的时候与线上服务器进行一个同步操作。


buidhome主要功能--监控配置项、程序版本、数据


由于buildhome内部已经存在了程序的初始/线上配置项和关联关系,既可以知道每一个配置项的值是什么,对于IP信息通过关联关系和当前环境的一个配置,即可以知道这个IP实际应该连哪台机器的哪个端口。通过与当前机器的模块的配置文件的对比,可以得出当前机器是否存在配置项的修改。

buildhome每天从线上下载程序的线上版本,也可以计算出线上版本程序的MD5值,每台机上的程序MD5值与之进行对比则可以查看当前机器是否与线上版本一致。
模块使用的数据有些是固定的数据,且可能一段时间后会进行改变,为达到一个完善的环境,也需要对这些数据进行管理,人为配置相关的检查。


buidhome主要功能--搭建、更新环境客户端


鉴于纯文本操作的困难以及难理解性,buildhome提供搭建和更新功能的客户端。基于上述分析,完成buildhome部署之后,最重要的是要有一个环境配置信息,这部分可以在客户端进行配置,然后搭建有客户端工具触发命令进行搭建。

 

对于初次使用或者维护时候有模块信息更改时候,可以使用如下界面管理buildhome数据信息和系统管理的模块信息。



buildhome的相关文件

1. buildhome.conf:buildhome的配置文件,为了提高一个通用性,提供了很多扩展脚本的接口,接下来进行讲解。buildhome.conf,
2. host_list.xml:指定环境中机器及其IP。例子:host_list.xml
格式为:<host_list>
<host_0>
<ip>xxx.xxx.xxx.xxx</ip>
<name>xxx.xxx.com </name>
</host_0>

3. buildhome.xml:具体描述了由tenv文件指定的测试环境中各个模块的部署机器情况。buildhome.xml
4. service.xml:相当于前面提到的buildhome.xml的模板,service.xml描述了所有环境中可能用到的模块的配置项信息。service.xml
<service>
<xxx>
<xxx>15002</xxx>
<yyy>IP_zzz</yyy>
</xxx>
</service>

5.data.xml:保存模块和数据的一个关联关系,搭建时候会进行选择性下载数据。如下:
<data_list>
<module_0>
<addr path=”/home/xxx/”>xxx/xxx</addr>
</module_0>
</data_list>
1. data目录下包含如下文件夹:config_lib是工具内部使用的配置项库。host_config是关联关系库和机器IP信息库,每天进行测试机同步的,online_bin是每天从线上下载的程序。online_conf是每天从OP机器上下载的不包含IP信息的线上配置项。online_data线上空数据环境,用于搭建环境使用。


buildhome的部署


1.模块与模块间的关联关系的文件,即service.xml。工具已集成提示相关功能,可以自动生成一个识别的关联关系的邮件发送给buildhome管理员。
2.当前产品线的机器信息的一个列表,即host_list.xml文件。可以使用机器缩写便于记忆,其余全部使用到的地方都使用缩写
3.模块与数据的关联关系的文件,即data.xml。如果不想buildhome管理数据,则可不提供,并且在配置项中去除。
4.一套实际环境的机器和机器配置运行的模块的信息,即*.tenv文件。例如:xxx-yyy.tenv(tenv is short for Testing ENVironment)表示xxx机器和yyy机器搭建一套环境。
5.与模块与数据关联关系的对应数据。
6.配置buildhome配置项适应当前环境。


buildhome的功能


执行./bin/buildhome -v会展现相关调用功能
Project: builhome
Version: buildhome 0.91 beta
BuildDate: Nov 4 2009 20:56:09
Author: kendlyluo
option[-r][-t][-b][-l][-S][-l][-T template_name]
-l :load the config of online_conf_path to tools
-T template_name [module name][template path] :download the template from main host and unzip and replace
-r + localhost name(no must) :recover testing env
-t :gen transfer config
-b :build testing env , will update bin/data/config
-S :run buildhome at service mode ,will check config and app
-l :表示load目标的配置文件成为工具使用的数据,进行一个格式的转换,配置项的路径为配置文件中的online_conf_path
-T:表示下载替换新模板,template_name参数必须,为template的压缩包文件名。如果只有这个参数,则模块的名有template压缩包里面的查找模块名,此时是到online_bin_path下载模板。如果最后一个参数template_path存在,到当前路径下拷贝和替换模板。
-r:表示重新配置当前环境的模块配置,会从*tenv文件转换生成buildhome.xml文件,不存在参数则工具自寻查找当前机器是环境中的哪一台。如果存在参数,则参数表示当前机器的那台。
-t:transfer的配置文件生成。社区产品专用
-b:经过-l和-r的导入数据信息后进行搭建环境,搭建环境会下载配置项、数据、程序.
-S:启动一个监控程序、配置项、数据的服务,每天定时进行监控,出现异常发送邮件
部署图如下:

 


配置buildhome配置文件


LOG_LEVEL : 16
LOG_PATH : ./log/
LOG_NAME : buildhome.

#数据路径,用于存放备份配置文件和程序模块信息
DATA_PATH : ./data/

#buildhome管理员邮件
administrator_mail: qablog@baidu.com

#是否要自动匹配关联关系
auto_fix : 1
#自行配置关联关系的文件
auto_fix_name : auto_fix.xml

#测试环境配置信息
env_name : ./conf/iknow_default.tenv

#机器IP,名字信息
host_list : host_list.xml

#模块关联关系、自定义配置项文件
service_list : service.xml

#工具内部使用的环境配置信息文件,工具内部使用,无需关心
host_config : buildhome.xml

#数据下载配置文件,可不配置,不配置则不进行数据管理和下载
data_download_name : data.xml

#supervise的名字,必须有supervise在DATA_PATH目录
supervise_name : supervise

#产品线名字,用于生成启动脚本和下载数据使用
type_name: iknow

#导入信息功能白名单和配置文件识别文件,在工具load数据时候使用
load_blank_file: ./conf/conf_name_end.txt

#生成loadxxx.sh脚本的特殊模块使用特殊的启动文件
load_script_except: ./data/host_config/load_except.txt

#默认产品线主目录,如果存在新OP运维模块,则在service脚本中表示
target_conf_path : /home/iknow/iknow/conf

#data.xml存在情况下,是否强制下载数据
download_data_if_exist : 0

#每天调用更新脚本时间,小时
update_time : 5

#检查环境信息时间,小时
check_time : 12

#配置项监控白名单
blank_file : ./conf/blank_list

#检查信息异常发送邮件文件
mail_file : ./conf/mail_list.txt

#线上配置项地址
online_conf_path : ./data/online_conf/

#每天进行数据同步的脚本
down_script : ./bin/download_online_conf.sh

#线上配置项下载地址,中控机配置
#ftp_path : ftp://xxxxxx/home/xxx/xx

#线上数据路径,不配置不进行下载,配置成当前路径则表示本机是中控机
online_data_path : ftp://xxx/home/xxx 
#online_data_path : ./data/online_data/

#线上程序路径,不配置不进行下载,配置成当前路径表示本机是中控机
online_bin_path : ftp://xxx/home/xxx 
#online_bin_path : ./data/online_bin/

#检查模块是否成功启动,在检查信息时候进行调用,可不配
check_run_script : ./bin/process_run.sh

#自行脚本下载数据,使用自己的脚本下载数据替换wget
#download_data_script : ./bin/download.sh

#辅助管理员识别IP配置文件,正则表达式实现,中控机配置
#ip_conf_mark: _MASKED_

#模板替换脚本
template_script : ./bin/ replace.sh

#模板替换的配置信息文件
template_file : ./conf/ replace.conf

#scp下载数据
data_script_end: sh bin/down_script_end.sh

#transfer配置文件生成需要的配置项(社区产品特有)
sdcenter_data_file: sdcenter.xml
trans_data_file : transfer.xml
ctransfer_data_file : ctransfer.xml

 

作者:kendlyluo

 

【本文转自百度测试技术空间http://hi.baidu.com/baiduqa/blog/item/9b22e8a56f2d3799d1435850.html












本文转自百度技术51CTO博客,原文链接:http://blog.51cto.com/baidutech/744529,如需转载请自行联系原作者

版权声明:本文首发在云栖社区,遵循云栖社区版权声明:本文内容由互联网用户自发贡献,版权归用户作者所有,云栖社区不为本文内容承担相关法律责任。云栖社区已升级为阿里云开发者社区。如果您发现本文中有涉嫌抄袭的内容,欢迎发送邮件至:developer2020@service.aliyun.com 进行举报,并提供相关证据,一经查实,阿里云开发者社区将协助删除涉嫌侵权内容。

分享:
开发与运维
使用钉钉扫一扫加入圈子
+ 订阅

集结各类场景实战经验,助你开发运维畅行无忧

其他文章