有人可以帮我写一个perl脚本,它将检查不同服务器上每个jenkins作业的健康状况。 以下是我想用于创建插件的步骤:
使用jenkins REST API我想找到jenkins作业并将它们存储到数组中。
http://my-host:8080/api/xml
Test_Job1 HTTP://詹金斯主机:8080 /工作/ Test_job1 / 红色 Test_job2 HTTP://詹金斯主机:8080 /工作/ Test_job2 / 红色 Test_View HTTP://詹金斯主机:8080 /
对于存储在数组中的每个jenkins作业,我想使用REST API监视每个作业的HealthReport。
http://my-host:8080/Job_name/api/xml
测试结果:在总共78次测试中未通过1次测试 健康80plus.png 98
根据jenkins工作的<score>98</score>
,我想在nagios GUI上显示OK,CRITICAL,WARNING。
如果<score>98</score>
小于50,则应在nagios GUI上显示CRITICAL。
答案 0 :(得分:1)
这仍然相当模糊和广泛..但基本上你知道你需要做什么我期待?获取一些XML解析器(我建议XML::Simple以简化),使用Nagios::Plugin来帮助您编写插件。您还可以获得REST::Client以便更轻松地使用jenkins的其余API
P.S。这是你第一次尝试perl吗?
答案 1 :(得分:0)
这是我写的代码。
#!/usr/bin/perl
use strict;
use warnings;
use LWP::UserAgent;
use XML::Twig;
use HTTP::Request;
use Getopt::Long;
use Nagios::Plugin;
#use File::stat;
use File::Basename;
my $PROGNAME = basename($0);
my $p = Nagios::Plugin->new(
usage => "Usage: %s [ -H|--host ] [ -p|--port ]",
extra => "
Examples:
$PROGNAME --host myhost -port 8080
Check Host name and port.
");
$p->add_arg(
spec => 'host|f=s',
required => 1,
help => "-H, --host=Hostname. REQUIRED.");
$p->add_arg(
spec => 'port|a=i',
default => 8080,
help => "-p, --port=Portnumber. Default 8080.");
$p->getopts;
my $o_host = $p->opts->host ;
my $o_port = $p->opts->port;
my $protocol = 'http';
my $o_url = '/api/xml';
my @jobs;
my $url = $protocol . "://" . $o_host . ":" . $o_port . $o_url ;
#print $url,"\n";
my $ua = LWP::UserAgent->new;
$ua->timeout(10);
$ua->env_proxy;
my $response = $ua->get($url);
if ($response->is_success) {
my $content = $response->decoded_content; # or whatever
XML::Twig->new( twig_roots => { 'job/name' => sub { push @jobs, $_->text; } }) ->parseurl( $url);
}
else {
$p->nagios_die( CRITICAL, "Bad page found" );
}
#print @jobs;
foreach my $job_name (@jobs) {
#print $job_name;
my $job_url = $protocol . "://" . $o_host . ":" . $o_port . "/" . "job" . "/" . $job_name . $o_url ;
#print $job_url;
my $response2 = $ua->get($job_url);
#print $job_url;
if ($response2->is_success) {
$p->nagios_die( OK, "Job link valid" );
}
else {
$p->nagios_die( CRITICAL, "Bad page found" );
}
}