在我们进行项目的构建过程中,如果项
在我们进行项目的构建过程中,如果项目的构建时间较长,通常的情况是我们只能等到构建结束后才能知道构建是否成功,也就是我们的进一步的工作都要等到构建结束后才能继续,如果项目构建需要1个小时,我们就需要等待1个小时,如果需要n个小时.... 通常项目的构建过程中会将build log输出到一个log文件中,通常这个文件是编译器直接写入的,也就是说这个文件中的信息是较为实时的,当然我们可以不断地人为的去查看log文件中的信息,检查是否出错。较好一点的情况是我们把这个log文件发布与Intranet上,这样大家都可以看到build的情况,但这毕竟还是有些不方便,我个人觉得理想的情况应该是这样:
1. 能够自动识别错误
2. 当出现Build Error时,第一时间自动通知相关人员,通知的方式可以是Email,消息通知,SMS等
3. 系统中可能存在一些可以忽略的Error信息,对于这些信息的出现,作为非错误处理
4. 普通的build log中信息较为繁杂,难以找到错误信息,应对build log进行一定的整理,以更友好的方式展现出来。
我们采用如下方式来实现上述想法
1. 当Build启动时,伴随着一个Build Monitor也将启动,
2. 每隔一段时间(时间间隔可以人为设定),自动检测错误一次
3. 采用Perl脚本通过正则表达来实现错误的检测,采用Commandline来实现间隔检测
4. 系统能够定义一些可忽略的错误,即这些错误可不视为错误处理
5. 根据build log中的格式,当出现错误的时候,提炼出最有意义的信息,存成将之存成文件,并停止监控,是否停止构建,视项目情况而定
6. 将提炼出来的信息发送给相关人员
附:错误检测脚本Perl
#Written by Sun Zhenfang
sub CompareErrFiles($$)
{
my @Standard=`type $_[0]`;
my @General=`type $_[1]`;
my $GeneralError;
my $StandardError;
if(scalar(@Standard)scalar(@General))
{
return 0;
}
else
{
for($i=0;$i@General;$i++)
{
目前孟山都主要的业务还是在美国本土 $iGeneral = rindex($General[$i],\"\\\\\");
$iStandard = rindex($Standard[$i],\"\\\\\");
if($iGeneral eq \'-1\' and $iStandard eq \'-1\')
{
if($General[$i]=~/.*\\s([]+[]*)\\serror.*([]+[]*)\\swarning.*/i)
{
$GeneralError=$1;
if($Standard[$i]=~/.*\\s([]+[]*)\\serror.*([]+[]*)\\swarning.*/i)
{
$StandardError=$1;
if($GeneralError!=$StandardError)
{
return 0;
}
}
else
{
return 0;
}
}
else
{
if(substr($General[$i],5) ne substr($Standard[$i],5))
{
return 0;
}
}
}
elsif($iGeneral*$iStandard0)#They are same to include \\
{
if(substr($General[$i],$iGeneral) ne substr($Standard[$i],$iStandard))
{
return 0;
}
}
else#One include \\,and other does not include \\
{
return 0;
}
}
}
return 1;
}
$LogFile=$ARGV[0]; #Build log file
$ErrFle=$ARGV[1]; #Output error file
$StandardErrorFile=$ARGV[2]; #Standard error file
system(\'del \'.$ErrFle.\' /F\');
@lines=`type $LogFile`;
my $i;
my $j;
my $k;
my $ErrCnt;
for($i=0;$i@lines;$i++)
{
if($lines[$i]=~/.*\\s([]+[]*)\\serror.*/i)
{
$ErrCnt=$1;
$j=0;
$k=0;
while($j=$ErrCnt)
{
chop($lines[$i-$k]);
if($lines[$i-$k]=~/.*error.*/i)
{
push(@errs,$lines[$i-$k]);
$j++;
}
$k++;
}
}
}
@errs = reverse @errs;
open(OUTFILE, \"\".$ErrFle);
print OUTFILE join(\"\\n\",@errs);
close OUTFILE;
if(CompareErrFiles($StandardErrorFile,$ErrFle))
{
system(\'del \'.$ErrFle.\' /F\');
}
附:定时检测,该段脚本调用Perl脚本探测错误, 并通过BLAT工具发送Email通知
REM Written by Sun Zhenfang
REM Baseline Name - %1
REM Baseline Source Path - %2
CD C:
CD C:\\BuildMonitor\\
DEL %ail /F
DEL %r /F
:WAIT
@SLEEP 120
IF NOT EXIST %g GOTO WAIT
IF EXIST %t GOTO STOP
@PERL %g %r %derr
IF EXIST %r GOTO ERR
GOTO WAIT
:ERR
@DEL %ail /F
@COPY t+%r+t %ail
@BLAT %ail -tf C:\\Bld_Start\\t -subject \"%COMPUTERNAME% BUILD MONITOR - %1 Error Information\"
:STOP
EXIT
文笔仓促为谦,日后补充
广州子宫内膜炎治疗费用老是反复感冒怎么回事
治白癜风哪间医院好
- 快讯!证券市场交易商协会将升级推出科创票据
- 困住友商?红米Note11T系列进一步被认定,用料全是性能向
- 她14岁爱上已婚代课,为和代课结婚断绝父母来往,一年后含泪离世
- 上海:目前在岗骑手已近2万人 多举措保障身心健康和配送安全
- 陕西省各类各级民办学校2021年比2020年减缓68所
- 大连:限制区域购二手住房不受已有住房总套数限制
- 高明的领导会容忍你很多错误,但这4个错误千万别犯上,否则必吃亏
- 为什么曼德拉效应出现的越来越多?难道人类的记忆仍要被篡改?
- 说袁泉老气的是没见过她22岁样子:特质好特质足,比章子怡还耀眼
- 傲农生物:实控人减持49.29%公司可转债傲农转债,电厂信托增持
- “骑行裤”在国外夜总会火了!要怎么选才时髦舒适,看完这篇就懂了
- 【大战“疫”日记】医患携手大战疫情 职业生涯放光芒