Usually it should be accomplished by configuring svn hooks,
however in some cases when we do not have svn server access we are unable to
notice if developers are committing as per SCM guideline. Rather monitoring manually it’s better to
automate the process which can check all commits in a day and notify the
user/administrator if the commit in improper.
That is the purpose of the script. We use the same user ID
and corresponding credential that is being used by Jenkins. To notify user or
administrator the script will use SMTP. At the end the script will be scheduled
as a user’s cron job at 22:30 PM every day.
Let’s have a look into the script…………
-DescriptorImpl_-PasswordCredential'}->{'userName'} . "\n";#!/usr/bin/perl use strict; use warnings; use Net::SMTP; use XML::Simple; my $release = shift(@ARGV); my $dt = `date +%Y-%m-%d`; my $base = 'https://your.host.com/base/url'; chomp($dt); my %hash; my %nuhash; my %users; my $details; my $xml = new XML::Simple; my $contain = $xml->XMLin("/path/to/jenkins-home/hudson.scm.SubversionSCM.xml"); my $user = $contain->{credentials}->{'entry'}->[0]->{'hudson.scm.SubversionSCM_\
-DescriptorImpl_-PasswordCredential'}->{'password'};my $auth = $contain->{credentials}->{'entry'}->[0]->{'hudson.scm.SubversionSCM_\
my $encode = `echo $auth | python -m base64 -d`; chomp($user); chomp($encode); if ($release =~ /REL_VER_/){ foreach my $repo ('app1', 'app2', 'app3') { my $repo = "$repo" . "/branches/" . "$release"; my $URL = "$base" . "$repo\n"; my @to = ('your_mail_id@domain.com'); my $LOG = `svn --username=$user --password=$encode log -r{$dt}:HEAD $URL`; open LOG,'-|',"svn log -r{$dt}:HEAD $URL" or die $@; my $i = 0; while (<log>) { next if /^----/; next if /^$/; if (/^r/) { my($rev, $user) = split /\|/, $_; $hash{$rev} = ''; $users{$rev} = $user; } else { my @keys = (keys %hash); my $key = $keys[$i]; delete $hash{$key}; $nuhash{$key} .= $_; } } close(LOG); foreach my $key (keys %hash) { if ($hash{$key} =~ /^$/){ $nuhash{$key} .= ''; } } foreach my $tab (keys %nuhash) { if ($nuhash{$tab} =~ /^$/ || $nuhash{$tab} =~ /^\s+$/ ) { $details = `svn log -r$tab $URL`; &_send_mail('your_mail_id@domain.com',"$tab :" . "$users{$tab} \
=> " . " NULL" , @to); } } $i++; } } # # Check hash # #foreach my $k (keys %nuhash) { #print "$k" . " => " . "$nuhash{$k}\n"; #} # # Send mail to the user # sub _send_mail { my ($from, $sub, @to) = @_; my $smtp = Net::SMTP->new('YOUR.SMTP.SERVER'); $smtp->mail($from); $smtp->to(@to); $smtp->data(); $smtp->datasend("To: @to\n"); $smtp->datasend("Subject: $sub\n"); $smtp->datasend("\n"); $smtp->datasend("$details\n"); $smtp->dataend(); $smtp->quit; }
A small correction has been made.......
ReplyDelete