2017-04-19 18 views
0

"--BuildSuccessful--"상태가 표시되면 로그 파일을 읽고 41 단계를 모두 검색하는 스크립트가 있습니다. 그러면 로그 파일이 현재 폴더에서 현재 성공적으로 이동합니다. 그것은 효과가 있었지만 최근에는 때때로 제대로 작동하지 않았습니다. 무슨 일이 벌어지고 있는지, 폴더의 현재 로그 파일은 아직 이해가 안됩니다. 제 코드 개선을 위해 시간을 내주십시오. 여기 Perl 스크립트의 문제 수정

파일 템플릿 로그 :

Build Number:: 21.9004.5200.0 BUILT TYPE::  Nightly build 
=========================================================== 
Progress    Time    Build Step 
BuildStarted CosmoRR  Tue Apr 11 20:05:38 2017  0 
CheckChanges   Tue Apr 11 20:05:38 2017   0 
PreBuildToolsSLN  Tue Apr 11 20:14:07 2017  0 
ReportDevEnvErrs  Tue Apr 11 20:14:12 2017  0 
CheckDevenvErrs  Tue Apr 11 20:14:12 2017  0 
ReplaceUCBVersionNumber Tue Apr 11 20:14:27 2017 1 
BuildVPresent   Tue Apr 11 20:14:27 2017   2 
BuildFlashAndFlex  Tue Apr 11 20:14:35 2017  3 
BuildFlexTop   Tue Apr 11 20:15:00 2017   4 
ObfuscatePHP   Tue Apr 11 20:15:07 2017   5 
ReplaceSTVersionNumber  Tue Apr 11 20:15:11 2017  6 
RunGetEnums   Tue Apr 11 20:15:11 2017   7 
ReplaceClientVersionNum Tue Apr 11 20:15:11 2017 8 
BuildAllSLN   Tue Apr 11 20:15:11 2017   9 
ReportDevEnvErrs  Tue Apr 11 20:35:32 2017  9 
CheckDevenvErrs  Tue Apr 11 20:35:32 2017  9 
ReportDevEnvErrs  Tue Apr 11 20:35:32 2017  9 
CheckDevenvErrs  Tue Apr 11 20:35:32 2017  9 
ReportDevEnvErrs  Tue Apr 11 20:35:32 2017  9 
CheckDevenvErrs  Tue Apr 11 20:35:32 2017  9 
ReportDevEnvErrs  Tue Apr 11 20:35:32 2017  9 
CheckDevenvErrs  Tue Apr 11 20:35:32 2017  9 
BuildSolution   Tue Apr 11 20:35:32 2017   10 
ReportDevEnvErrs  Tue Apr 11 20:43:20 2017  10 
CheckDevenvErrs  Tue Apr 11 20:43:20 2017  10 
BuildPresenterInstaller Tue Apr 11 20:43:20 2017 11 
BuildMsiInstaller  Tue Apr 11 20:43:20 2017  11 
CheckSignCodeErrors  Tue Apr 11 20:43:23 2017  11 
BuildAcceleratorInstaller Tue Apr 11 20:43:23 2017 11 
BuildMsiInstaller  Tue Apr 11 20:43:23 2017  11 
CheckSignCodeErrors  Tue Apr 11 20:43:24 2017  11 
CheckSignCodeErrors  Tue Apr 11 20:44:24 2017  11 
CheckSignCodeErrors  Tue Apr 11 20:44:24 2017  11 
GetPhoneInstaller  Tue Apr 11 20:44:24 2017  12 
GetManhattanClientExo  Tue Apr 11 20:44:28 2017  13 
GetManhattanClientEndo  Tue Apr 11 20:44:29 2017  14 
GetManhattanClient  Tue Apr 11 20:44:29 2017  15 
GetShoreTelPlayer  Tue Apr 11 20:44:34 2017  16 
GetConnectforMSFT  Tue Apr 11 20:44:35 2017  17 
GetCCClient   Tue Apr 11 20:44:37 2017   18 
SpawnLinuxBuild  Tue Apr 11 20:44:38 2017  19 
BuildSwitches   Tue Apr 11 20:44:39 2017   20 
BuildFilesys   Tue Apr 11 21:07:07 2017   20 
ReportDevEnvErrs  Tue Apr 11 21:07:13 2017  20 
CheckDevenvErrs  Tue Apr 11 21:07:13 2017  20 
BuildCASTestingTools  Tue Apr 11 21:07:17 2017  21 
ReportDevEnvErrs  Tue Apr 11 21:07:33 2017  21 
CheckDevenvErrs  Tue Apr 11 21:07:33 2017  21 
BuildPHR   Tue Apr 11 21:07:33 2017   22 
BuildRuby   Tue Apr 11 21:07:36 2017   23 
BuildRubyDirector2  Tue Apr 11 21:07:52 2017  24 
CreateTAPISDK   Tue Apr 11 21:13:30 2017   25 
SignTDIMedia   Tue Apr 11 21:13:31 2017   26 
BuildAPPFolder   Tue Apr 11 21:13:32 2017   27 
BuildRubywin   Tue Apr 11 21:13:40 2017   28 
BuildRubymingw   Tue Apr 11 21:18:06 2017   29 
BuildNginx   Tue Apr 11 21:22:05 2017   30 
BuildNginx   Tue Apr 11 21:22:06 2017   31 
GetSalesforcePlugin  Tue Apr 11 21:22:19 2017  32 
RunPrep4Install  Tue Apr 11 21:22:23 2017  33 
RunPrep4Install_iteration_1 Tue Apr 11 21:27:23 2017 33 
RunPrep4Install_iteration_2 Tue Apr 11 21:32:23 2017 33 
RunPrep4Install_iteration_3 Tue Apr 11 21:37:23 2017 33 
RunPrep4Install_iteration_4 Tue Apr 11 21:42:23 2017 33 
RunPrep4Install_iteration_5 Tue Apr 11 21:47:23 2017 33 
CheckSignCodeErrors  Tue Apr 11 21:47:48 2017  33 
Client_3rdParty_DiagMonitoring_Installer Tue Apr 11 21:47:48 2017 34 
Build3rdPartyInstaller  Tue Apr 11 21:47:48 2017  34 
BuildMsiInstaller  Tue Apr 11 21:47:48 2017  34 
BuildDiagMonitoringInstaller Tue Apr 11 21:47:50 2017 34 
BuildMsiInstaller  Tue Apr 11 21:47:50 2017  34 
BuildDMuiInstaller  Tue Apr 11 21:47:51 2017  34 
BuildMsiInstaller  Tue Apr 11 21:47:51 2017  34 
CheckSignCodeErrors  Tue Apr 11 21:49:54 2017  34 
CheckSignCodeErrors  Tue Apr 11 21:49:54 2017  34 
BuildRemoteServer  Tue Apr 11 21:49:54 2017  35 
BuildMsiInstaller  Tue Apr 11 21:49:54 2017  35 
CheckSignCodeErrors  Tue Apr 11 22:01:25 2017  35 
BuildRemoteServerDC  Tue Apr 11 22:01:25 2017  36 
BuildMsiInstaller  Tue Apr 11 22:01:25 2017  36 
CheckSignCodeErrors  Tue Apr 11 22:08:12 2017  36 
Server_LinuxDVX_Switch_Platform_DC_Installer Tue Apr 11 22:08:12 2017 37 
BuildDataCenterServerInstaller Tue Apr 11 22:08:12 2017 37 
BuildMsiInstaller  Tue Apr 11 22:08:12 2017  37 
BuildLinuxDVSInstaller  Tue Apr 11 22:08:14 2017  37 
BuildMsiInstaller  Tue Apr 11 22:08:14 2017  37 
BuildSwitchInstaller  Tue Apr 11 22:08:14 2017  37 
BuildMsiInstaller  Tue Apr 11 22:08:14 2017  37 
BuildPlatformInstaller  Tue Apr 11 22:13:15 2017  37 
BuildMsiInstaller  Tue Apr 11 22:13:15 2017  37 
BuildServerInstaller  Tue Apr 11 22:13:15 2017  37 
BuildMsiInstaller  Tue Apr 11 22:13:15 2017  37 
CheckSignCodeErrors  Tue Apr 11 22:59:44 2017  37 
CheckSignCodeErrors  Tue Apr 11 22:59:46 2017  37 
CheckSignCodeErrors  Tue Apr 11 22:59:46 2017  37 
CheckSignCodeErrors  Tue Apr 11 22:59:47 2017  37 
CheckSignCodeErrors  Tue Apr 11 22:59:47 2017  37 
RunpostInstall   Tue Apr 11 22:59:47 2017   38 
ReportVersions   Tue Apr 11 23:00:03 2017   39 
BuildAllSims   Tue Apr 11 23:00:04 2017   40 
ReportSIMDevEnvErrors  Tue Apr 11 23:02:41 2017  40 
CheckDevenvErrs  Tue Apr 11 23:02:41 2017  40 
BuildAllSimsVS2010  Tue Apr 11 23:03:44 2017  41 
ReportSIMDevEnvErrors  Tue Apr 11 23:03:57 2017  41 
CheckDevenvErrs  Tue Apr 11 23:03:57 2017  41 
=========================================================== 
--BuildSuccessful-- 
Successful   Tue Apr 11 23:05:55 2017   41 

그리고 내 스크립트를

opendir DIR1, "C:\\BuildStatus\\Current\\" or die "cannot open dir $dir: $!"; 
my @files= grep ! /^\.+$/, readdir DIR1; 
foreach my $files (@files) 
{ 
    $searchsucs = "--BuildSuccessful--"; 
    $oldLoc2 = "C:\\BuildStatus\\Current\\".$files; 
    $newLocS2 = "C:\\BuildStatus\\History\\Successful\\".$files; 
    $newLocF2 = "C:\\BuildStatus\\History\\Failed\\".$files; 
    open(E_FILE,"C:\\BuildStatus\\Current\\".$files); 
    @valf2 = <E_FILE>; 
    my $newLoc2 = ""; 
    foreach $searchf2 (@valf2) 
    { 
     if ($searchf2=~/$searchsucs/) 
      { print "matched"; 
       $num1 =$num1 + 1; 
      }else 
      { print "not matched"; 
       $num1 = $num1 + 0; 
      } 
    } 
    close E_FILE; 
    print "moving build status file......\n"; 
    if($num1 == 1) { 
     fmove($oldLoc2, $newLocS2) or warn "$file Warning: Not able to move build status files \n "; 
     system(qq(E:\\depot\\builds\\PassedBuilds.bat)); 
    } else { 
     fmove($oldLoc2, $newLocF2) or warn "$file Warning: Not able to move build status files \n "; 
    } 
} 
closedir DIR1; 
+0

각 파일에 대해'$ num1' 변수를 재사용하는 것처럼 보이지만 '0'으로 재설정하지 않았습니다. 첫 번째 빌드가 성공적으로 끝난 후, 나머지는'else num '> 1 때문에'else' 블록에 충돌합니다. – xxfelixxx

+0

foreach 루프 앞에 $ num1 = 0을 설정해야한다는 것을 의미합니까 ??? –

+0

'$ num1'의 계산은 확실히 문제가됩니다. 하지만이 문제는 발생하지 않습니다. '$ num1' 값이 무엇이든 관계없이 파일은 현재 디렉토리에서 "Successful"또는 "Failed"디렉토리로 이동해야합니다. –

답변

2

난 당신이 폴더 현재 여전히 "(로그 파일을 설명하는 문제의 원인을 볼 수 없습니다 ")하지만 질문의 다른 부분 ("코드 개선에 도움 ")을 확실히 도울 수 있습니다. 이 코드를 다음과 같이 작성하십시오.

# Lexical variable for directory handle 
# Single-quoted string 
# Reverse slash direction to improve readability 
opendir my $dir_h, 'C:/BuildStatus/Current/' 
    or die "cannot open dir $dir: $!"; 

my @files = grep ! /^\.+$/, readdir $dir_h; 

# This doesn't change. Move it out of the loop. 
my $searchsucs = '--BuildSuccessful--'; 

# Rename $files to $file to improve readability 
foreach my $files (@files) { 
    # Lexical variables (with "my") 
    # Use variable interpolation instead of string concatenation 
    # Reverse slash durection for readability 
    # Don't define variables until you need them 
    my $oldLoc2 = "C:/BuildStatus/Current/$file"; 


    # Lexical variable for file-handle 
    # Three args in open() call 
    # Use $oldLoc2 variable 
    # Check return value from open() 
    open(my $fh, '<', $oldLoc2) 
    or die "Cannot open $file: $!"; 

    # Use a $found variable 
    my $found; 

    # Remove unused $newLoc2 variable 
    # Remove unnecessary @valf2 variable 
    # Process input file a line at a time (use while, not foreach) 
    # Use Perl's default variable $_ for clarity 
    while (<$fh>) { 
    if (/$searchsucs/) { 
     print "matched"; 
     $found = 1; 
     # Skip rest of loop 
     last; 
    } else { 
     # This will be a bit noisy! 
     print "not matched" 
    } 
    } 

    # Lexical filehandle means no need to explicitly close file 

    print "moving build status file......\n"; 

    # Simpler logic check 
    if ($found) { 
    my $newLocS2 = "C:/BuildStatus/History/Successful/$file"; 
    fmove($oldLoc2, $newLocS2) 
     or warn "$file Warning: Not able to move build status files \n "; 
    system(qq(E:\\depot\\builds\\PassedBuilds.bat)); 
    } else { 
    my $newLocF2 = "C:/BuildStatus/History/Failed/$file"; 
    fmove($oldLoc2, $newLocF2) 
     or warn "$file Warning: Not able to move build status files \n "; 
    } 
} 

도움이 될까요?