您的位置: 旅游网 > 综艺 >> 湖南

在我们进行项目的构建过程中,如果项

发布时间:2021-10-26 07:15:58

在我们进行项目的构建过程中,如果项目的构建时间较长,通常的情况是我们只能等到构建结束后才能知道构建是否成功,也就是我们的进一步的工作都要等到构建结束后才能继续,如果项目构建需要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

文笔仓促为谦,日后补充

广州子宫内膜炎治疗费用
老是反复感冒怎么回事
治白癜风哪间医院好
猜你会喜欢的
猜你会喜欢的