Perl script sets up Jenkins jobs to automate builds and tests

The Bare Necessities

If the script determines that the configuration data already stored on the Jenkins server is identical to the data generated locally via the template, it leaves the current project in peace and moves on to the next one. If the configurations differ, it overwrites the server configuration with the new locally generated configuration. If it sees that the project does not exist on the Jenkins server, it calls the create_job() method to set up a new build process.

The flow of the script can thus generate something like the following output:

2014/08/05 21:20:18 Job for log4perl already exists.
2014/08/05 21:20:18 Updating job log4perl2014/08/05 21:20:18Creating new job for libwww-perl.
2014/08/05 21:20:18 Creating new job for algorithm-bucketizer.

The first project needed updating; the other two were not even on the server, so they were set up.

The results are shown in Figure 4. All three Perl projects were set up identically and differ only in terms of their individual GitHub URLs and the project names. Users can run all three regularly via a cronjob, triggered by a web hook for incoming commits on GitHub, or by pressing the Build Now button.

Figure 4: Three different projects run on a Jenkins installation, all set up by a Perl script.

Virtual Installation

I installed the Jenkins server on my desktop at home in a VirtualBox VM created with Vagrant. The idea was to keep my workspace clean and make it easier to reset to an empty Jenkins server installation for testing purposes using a snapshot I created previously.

The Vagrant file in Listing 5 uses the Ubuntu 12.4 image downloaded from vagrantbox.es and passes the port used by Jenkins (8080) from the VM through to the host so that the user can control the Jenkins server on the host.

Listing 5

Vagrant File

 

The Jenkins CI server, installed according to the official instructions [5], curiously seems to be stuck in the past century and can only handle legacy CVS and SVN repositories if left to its own devices. However, after waiting some time, the server shows you a menu Manage Jenkins | Manage Plugins | Available with a Git Plugin (Figure 5), which you can then download and install using point and click in the browser (Figure 6).

Figure 5: The Git plugin can be downloaded and installed in the Manage Jenkins menu.
Figure 6: The complete installation of the Git plugin for Jenkins takes no longer than a minute and also runs directly in the web browser.

The Ubuntu VM does not include the git command-line tool, which means you need to access the VM using vagrant ssh and then install the tool by typing sudo apt-get install git. Use cases for the CI server are not limited to building and running the test suite; you can also define additional build steps that push the checked-in code into production  – much to the delight of the developer  – without any further human intervention or delays.

Infos

  1. Jenkins: http://jenkins-ci.org
  2. Teamcity: http://www.jetbrains.com/teamcity
  3. "Headache-Free Continuous Integration" by Michael Schilli, Linux Magazine, Issue 140: http://www.linux-magazine.com/Issues/2012/140/Perl-Travis-CI/(language)/eng-US
  4. Listings for this article: ftp://www.linux-magazin.de/pub/listings/magazin/2014/10/Perl
  5. Jenkins installation on Ubuntu: https://wiki.jenkins-ci.org/display/JENKINS/Installing+Jenkins+on+Ubuntu

The Author

Mike Schilli works as a software engineer with Yahoo! in Sunnyvale, California. He can be contacted at mschilli@perlmeister.com. Mike's homepage can be found at http://perlmeister.com.

Buy this article as PDF

Express-Checkout as PDF
Price $2.95
(incl. VAT)

Buy Linux Magazine

SINGLE ISSUES
 
SUBSCRIPTIONS
 
TABLET & SMARTPHONE APPS
Get it on Google Play

US / Canada

Get it on Google Play

UK / Australia

Related content

  • vcpkg

    If you use a state-of-the-art language such as C/C++, you need a package manager in your toolbox for managing libraries and their dependencies. Microsoft's vcpkg package manager offers an easy-to-use, platform-independent solution.

  • Perl: Travis CI

    A new service on travis-ci.org picks up GitHub projects, runs new code through test suites, and notifies the owners if the build fails. Its API enables Perl scripts to gather historical build data, including who-broke-the-build tabulations.

  • Perl – Programming Tips

    If you have been programming for decades, you've likely gathered a personal bag of tricks and best practices over the years – much like this treasure trove from the Perlmeister.

  • Perl: PerlPanel

    One panel has a neat collection of applets and another has spectacular looks – but a combination of the two is rare. Now help draws nigh for the desktop: PerlPanel is extensible with do-it-yourself widgets.

  • YunoHost

    YunoHost offers a wide range of services on a proven Debian platform that you can host yourself.

comments powered by Disqus
Subscribe to our Linux Newsletters
Find Linux and Open Source Jobs
Subscribe to our ADMIN Newsletters

Support Our Work

Linux Magazine content is made possible with support from readers like you. Please consider contributing when you’ve found an article to be beneficial.

Learn More

News