Continuous Integration for Perl Applications with Jenkins

Jenkins LogoAt first glance, it might seem odd to setup a build environment for applications written in Perl, since Perl scripts aren’t compiled to a binary.

However, a build environment can be used for many other things besides making binaries:

  • checking out source code
  • syntax checking with perl -c
  • pod checking with podchecker
  • style checking with Perl::Critic
  • test coverage checking
  • spinning up VMs or cloud instances
  • running test harnesses on multiple test servers
  • doing performance testing
  • doing localization tasks and coverage
  • building XS or SWIG modules
  • generating documentation
  • archiving build artifacts
  • deploying successful builds.

Jenkins (formerly Hudson) is an Open Source (MIT License) project that provides a user-friendly, standard UI, API and framework for automating the above. It runs as an HTTP server on port 8080 by default.

Jenkins brings transparency to the build process, which helps in the communication between dev, qa and mgmt. It also improves continuity of software projects as employees join and leave a project.

It takes about an hour to install Jenkins, and less than a day to get it doing useful work.

If you need to install git support but repo updates for Perl modules are suppressed (common in cpanel or some commercial systems), then try this:

yum install git --disableexcludes=main

You can integrate existing build scripts into Jenkins using the Execute Shell job feature. (Just return zero for success and one for failure.)

Resources

dk-hostmaster: Perl and Continuous Integration with Jenkins
Using Git with Jenkins
Better Integration Between Jenkins and GitHub (with the GitHub Jenkins Plugin)
RFC: Continuous Integration (CI) for your CPAN modules (for free!)

This entry was posted in API Programming, Open Source, Perl, Tech. Bookmark the permalink.

Leave a Reply

Your email address will not be published.

This site uses Akismet to reduce spam. Learn how your comment data is processed.