[英]How do I add jobs to an organizational set with the Kronos XML API?
[英]How to get a list of Jenkins Jobs using XML API
我从Jenkins REST API http://jenkins-host:8080/api/xml
获得了原始xml数据。 现在,我正在努力将工作名称列表从该xml中移出到perl数组或变量中。 以下是xml API的格式
<hudson>
<job>
<name>Test_Job1</name>
<url>http://jenkins-host:8080/job/Test_job1/</url>
<color>red</color>
</job>
<job>
<name>Test_job2</name>
<url>http://jenkins-host:8080/job/Test_job2/</url>
<color>red</color>
</job>
<view>
<name>Test_View</name>
<url>http://jenkins-host:8080/</url>
</view>
</hudson>
在这里,我只想将作业名称存储到数组中,而不是视图名称。 例如:
@list = (Test_job1, Test_job2)
使用XML :: Twig它将是:
#!/usr/bin/perl
use strict;
use warnings;
use XML::Twig;
my @jobs;
XML::Twig->new( twig_roots => { 'job/name' => sub { push @jobs, $_->text; } })
->parseurl( 'http://jenkins-host:8080/api/xml');
my $xml = <<XML;
<hudson>
<job>
<name>Test_Job1</name>
<url>http://jenkins-host:8080/job/Test_job1/</url>
<color>red</color>
</job>
<job>
<name>Test_job2</name>
<url>http://jenkins-host:8080/job/Test_job2/</url>
<color>red</color>
</job>
<view>
<name>Test_View</name>
<url>http://jenkins-host:8080/</url>
</view>
</hudson>
XML
my @rules = (
'hudson' => sub { $_[1]->{name} },
job => sub { '@name' => $_[1]{name} },
name => 'content',
_default => undef,
);
my $xr = XML::Rules->new(rules => \@rules);
my $data = $xr->parse($xml);
print Dumper $data;
要么:
my @jobs;
my @rules = (
job => sub { push @jobs, $_[1]{name} },
name => 'content',
_default => undef,
);
my $xr = XML::Rules->new(rules => \@rules);
$xr->parse($xml);
print Dumper \@jobs;
最简单的事情就是这个正则表达式。
my @matches = ( $xml =~ m(<name>(.*?)</name>)gs) ;
如果您的XML格式经常更改,那么您将需要考虑使用XML解析器而不是这种简单的正则表达式匹配。
编辑:添加说明
正则表达式假定您将所有XML都放在一个标量变量中,“ s”修饰符告诉Perl将整个字符串视为一条长行(“。”将与换行符匹配),而“ g”修饰符告诉Perl以搜索整个字符串,而不是在第一个匹配项时退出。
正则表达式本身只是查找所有名称标签对,并捕获它们之间的内容。 通过添加问号来修改'。 '模式,我们告诉perl不要贪心,因此当它看到第一个结束名称标签时,它将停止捕获。 除此以外 '。 '会一直匹配到最后一个名字结束标记,而这不是我们想要的。
我们也可以将捕获内容写为([^ <] +)。 我想这是偏爱的问题。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.