结合ruby写的一个校验工具
?
?
那么到这里,我们第一步通过svn拿到前端要发布的文件信息了;
{下面是svn log常用的几个参数
svn log [PATH]
svn log URL [PATH...]
?
它有几个参数:
--revision (-r) REV
--quiet (-q) 不打印信息,或只打印概要信息
--verbose (-v) ?打印附加信息
--targets FILENAME 传递文件 ARG 内容为附件参数
--stop-on-copy 可以关闭这种行为,这可以用来找出分支点
--incremental 给予适合串联的输出
--xml ?输出为 XML
全局配置项说明
--username USER 指定用户名称 ARG
--password PASS 指定密码 ARG
--no-auth-cache 不要缓存用户认证令牌
--non-interactive 不要交互提示
--config-dir DIR 从目录 DIR读取用户配置文件
}
?
?
第二步:读取XML文件,根据提交用户名字拿到该用户更新的文件,下面是具体的实现方式:
?
先附上一段xml内容:
<?xml version="1.0" encoding="UTF-8"?>
<log>
<logentry
? ?revision="7842">
<author>daqiu.lym</author>
<date>2012-12-27T09:49:13.386760Z</date>
<paths>
<path
? ?action="M"
? ?kind="">/trunk/malldetail/assets/4.0a/common/util.js</path>
<path
? ?action="M"
? ?kind="">/trunk/malldetail/assets/4.0a/other/ishare.js</path>
</paths>
</logentry>
</log>
?
?
?
?
?
这里需要补充下,有将trunk替换为 apps,以及将assets去除,是为了方便第三步拼接URL校验;
感兴趣的还可以了解下sub或者gsub方法来进行替换的区别,他们两个方法第一个参数都是接受正则表达式。其中,sub方法替换掉第一个匹配的地方,而gsub方法替换掉左右匹配的地方,所以这里选择用gsub;
第二步实现方式就这么多了,在这过程中有遇到下面的两情况,最终通过查阅些资料和时间,选择了使用XPath.match
Q2:XPath
**不是直接的arr = IO.readlines(%%1) ?#"myfile" 因为不需要太多的内容,我们只需要获取部分内容
?
Q3:
?# # ?xml解析
? ? #没有选取
? ? #doc = Document.new(File.open("my.xml"))
? ? #doc.elements.each("log/logentry/paths"){ ?|elem|
? ? # puts elem.attributes["path"]
? ? # ?puts "start"
? ? #}
第三步:将数组中的文件名放到CDN校验平台逐一校验
?校验平台: http://assets.f2e.taobao.net/?
这里是直接的将文件名以及路径拼接到校验平台后的方式来实现:
?
#访问到查看页面 url="http://a...../" ie = IEModel.start(url) #将更新的文件拼到URL中,然后检测更新的文件是否被同步到每个节点 for $i in 0...(arr.size()-1) do # 拼接URL urla="http://a.cn"+arr[$i].to_s ie.goto(url+"?path="+urla)?
?
然后校验页面的返回信息,根据返回信息作出相应的操作;
到这里为止,三部曲就完成了,这里还需要更多优化,目前这个需要依赖ruby的环境,我在这里抛砖引玉,希望大家有更好的更简洁方便的方法,然后一起来探讨。
?
?
?
?