#!/usr/local/bin/perl -w use strict; use YAML qw( LoadFile ); use Jenkins::API; use Template; use Log::Log4perl qw(:easy); my $projects_data_file = "jenkins-projects.yml"; my $jenkins_url = "http://localhost:8080"; my $projects_tmpl_file = "project-jenkins.tmpl"; Log::Log4perl->easy_init($DEBUG); my $tt = Template->new(); my $jenkins = Jenkins::API->new( { base_url => $jenkins_url }); my $data = LoadFile( $projects_data_file ); for my $project ( @$data ) { my $xml = $jenkins->project_config( $project->{ name } ); $tt->process( $projects_tmpl_file, $project, \my $new_xml ) or $tt->error; if( $xml =~ /^<\?xml/ ) { INFO "Job for $project->{ name } ", "already exists."; if( $new_xml ne $xml ) { INFO "Updating job $project->{ name }"; $jenkins->set_project_config( $project->{ name }, $new_xml ) or die; } next; } INFO "Creating new job for ", "$project->{ name }."; $jenkins->create_job( $project->{ name }, $new_xml ) or die; }