|
|
@REM ----------------------------------------------------------------- @REM @REM release.cmd - SuemiaoR @REM Move the build to the shared release directory locally. @REM @REM Copyright (c) Microsoft Corporation. All rights reserved. @REM Version: < 1.0 > 02/02/2001 Suemiao Rossignol @REM ----------------------------------------------------------------- @perl -x "%~f0" %* @goto :EOF #!perl use strict; use lib $ENV{RAZZLETOOLPATH} . "\\PostBuildScripts"; use lib $ENV{RAZZLETOOLPATH}; use PbuildEnv; use Logmsg; use ParseArgs; use File::Basename; use BuildName; use GetIniSetting; use comlib;
my $scriptname = basename( $0 );
sub Usage { print<<USAGE;
A wrapper starting release processes which are srvrel, miscrel and startsymcopy.
Usage: $scriptname: -l:<language> [-b:<BuildName>] [-p]
-l Language. Default is "usa".
-b Build Name. Default is defined in <ReleaseShare>\\<buildName>\\build_logs\\buildname.txt for language usa. <ReleaseShare>\\<lang>\\<buildName>\\build_logs\\buildname.txt for language none usa. -o Executing options of release processes. Use ',' to separate options. Default to all options when undefined.
-? Display Usage.
Example: $scriptname -l:ger -b:2415.x86fre.main.001222-1745 -p $scriptname -o:srvrel,miscrel
USAGE exit(1) }
my ( $lang, $buildName, $execOpt, $powerLess ); my ( $buildBranch, $buildArch, $buildType, $iniFile ); my ( $computerName, $releaseShareRootDir, $releaseResDir, @releaseServers ); my ( $localReleaseDrive, $iniConglomerator, $iniSymfarm );
my @defaultOpts = ( "srvrel", "miscrel", "startsymcopy" ); my %releaseOpts;
&GetParams(); if( !&InitVars() ) { exit(1); } system("$ENV{RAZZLETOOLPATH}\\setbuildstatus.cmd -s:release"); if( !&StartPostBootRelease ){ exit(1); } exit(0);
#----------------------------------------------------------------------------- sub GetParams { parseargs('?' => \&Usage, 'b:' => \$buildName, 'o:' => \$execOpt ); $lang = $ENV{lang}; $computerName = $ENV{computername};
my @tmpOpts = split( /\,/, $execOpt ); @tmpOpts = @defaultOpts if( !@tmpOpts );
for my $theOpt( @tmpOpts ) { $releaseOpts{$theOpt} = 1; } }
#----------------------------------------------------------------------------- sub InitVars { my ( @iniRequest );
#####Set build name, buildbranch, buildArch, buildType and ini file if( !$buildName ) { if( -e $ENV{_NtPostbld} ) { errmsg( "Found $ENV{_NtPostbld} exists." ); return 0; } my ($cmdLine ) = "$ENV{RazzleToolPath}\\postbuildscripts\\getlatestrelease.cmd -l:$lang"; return 0 if( !chomp($buildName= `$cmdLine`) ); } $buildBranch = build_branch($buildName); $buildArch = build_arch($buildName); $buildType = build_type($buildName); if( !$buildBranch || !$buildArch || !$buildType ) { errmsg( "Unable to parse [$buildName]"); return 0; } $iniFile = "$buildBranch.$lang.ini"; #####Set release Share Drive @iniRequest = ("LocalReleaseDrive::$ENV{computerName}"); $localReleaseDrive = &GetIniSetting::GetSettingEx( $buildBranch,$lang,@iniRequest ); if ( !$localReleaseDrive ) { $ENV{_ntdrive} =~ /(.*)\:/; $localReleaseDrive = $1; }
#####Set <ReleaseShareName> & <ReleaseShareRootDir> & <ReleaseDir> my ( $releaseShareName ) = &comlib::GetReleaseShareName( $ENV{_BuildBranch}, $lang ); $releaseShareRootDir = "$localReleaseDrive:\\$releaseShareName"; if( lc($lang) eq "usa" ) { $releaseResDir = "$releaseShareRootDir\\$buildName"; } else { $releaseResDir = "$releaseShareRootDir\\$lang\\$buildName"; } if( !( -e $releaseResDir ) ) { errmsg( "[$releaseResDir] not exists, exit." ); return 0; }
#####Set release servers @iniRequest = ( "ReleaseServers::$buildArch$buildType" ); my( $iniRelServers ) = &GetIniSetting::GetSetting( @iniRequest ); @releaseServers = split( /\s+/, $iniRelServers ); #####Set Symbol Servers $iniSymfarm = &GetIniSetting::GetSettingEx( $buildBranch,$lang,"SymFarm" );
#####Set Conglomerate Servers $iniConglomerator = &GetIniSetting::GetSettingEx( $buildBranch,$lang,"ConglomerationServers" ); logmsg( "Lauguage ..............[$lang]" ); logmsg( "Executing Options......[$execOpt]" ); logmsg( "This computer..........[$computerName]" ); logmsg( "Build name ............[$buildName]" ); logmsg( "Ini file ..............[$iniFile]" ); logmsg( "Release share name ....[$releaseShareName]" ); logmsg( "Release share resource [$releaseResDir]" ); logmsg( "Release Servers .......[@releaseServers]"); logmsg( "Conglomerate Servers...[$iniConglomerator]"); logmsg( "Symbol Servers.........[$iniSymfarm]"); logmsg( "Temp Log file .........[$ENV{LOGFILE}]" ); logmsg( "Temp Error file .......[$ENV{ERRFILE}]" ); return 1; } #----------------------------------------------------------------------------- sub StartPostBootRelease { my ( $cmdLine, $dash);
$dash = '-' x 60; logmsg ( $dash );
#####SrvRel if( exists $releaseOpts{ srvrel } ) { &StartRemoteRelease; } logmsg ( $dash );
#####MiscRel if( exists $releaseOpts{ miscrel } && $ENV{ OFFICIAL_BUILD_MACHINE } && $iniConglomerator ) { $cmdLine = "$ENV{RazzleToolPath}\\PostBuildScripts\\miscrel.cmd -l:$lang -b:$buildName"; &comlib::ExecuteSystem( $cmdLine ); } logmsg ( $dash );
####StartsymCopy if( exists $releaseOpts{ startsymcopy } && $ENV{ OFFICIAL_BUILD_MACHINE } && $iniSymfarm ) { $cmdLine = "perl $ENV{RazzleToolPath}\\PostBuildScripts\\startsymcopy.pl -l:$lang"; &comlib::ExecuteSystem( $cmdLine ); } logmsg ( $dash );
return 1; }
#----------------------------------------------------------------------------- sub StartRemoteRelease { my ( $cmdLine );
#####set remote name my( @iniRequest ) = ( "AlternateReleaseRemote" ); my( $remoteName ) = &GetIniSetting::GetSettingEx( $buildBranch, $lang, @iniRequest ); $remoteName = "release" if( !$remoteName ); #####Start remote srvrel my $status=1; for my $relServer ( @releaseServers ) { #####Check the remote connection if( !&comlib::ExecuteSystem( "net view $relServer >nul 2>nul" ) ) { errmsg( "Cannot see remote server [$relServer], skipping" ); next; }
#####Remote is not required when Build machine is a Release server also if( lc($computerName) eq lc( $relServer) ) { &comlib::ExecuteSystem("$ENV{RazzleToolPath}\\PostBuildScripts\\srvrel.cmd -l:$lang -b:$buildName" ); next; }
#####Remote connection $cmdLine = "echo pushd ^^%RazzleToolPath^^% ^& echo del /q /a-r * ^& echo popd ^&"; $cmdLine .= "echo pushd ^^%RazzleToolPath^^%\\PostBuildScripts ^& echo del /q /a-r * ^& echo popd ^&"; $cmdLine .= "echo pushd ^^%RazzleToolPath^^% ^& echo sd sync ... ^& echo popd ^&"; $cmdLine .= " echo start /min cmd /c SrvRel.cmd \-l:$lang \-b:$buildName"; $cmdLine .= " \| \@remote.exe /c $relServer $remoteName /L 1"; #####Remote.exe always return 6, ignore the return value if( !&comlib::ExecuteSystem( $cmdLine ) ) { errmsg( "Failed to start remote release on [$relServer], please investigate." ); $status=0; } } return $status; }
#----------------------------------------------------------------------------- 1;
|