BTMash

Blob of contradictions

3 months in - working with Jenkins

Written

Its been over 3 months since I posted about installing Jenkins and Fabric on RHEL and I wanted to just chime back on the whole thing. Since I had started work for the client, I've actually implemented Jenkins on our campus for various development projects to work with the developers that we have and so far it has been a wonderful experience. I no longer get calls to update our development environments (and in the case of the external client, I don't get any calls to push code from dev to staging to live, or to synchronize dbs / shared files between the environments). I get calls to push from dev to production (which is currently by design - a final check to make sure everything is ok). And I do get emails though they are directly from the Jenkins build server - it is to let me know how the jobs are going (are they failing) along with a log of what happened (a couple of times, it has been related to server settings, a few other times, it has been due to errors in the application so it is much easier to point blame in the right direction :)). The most important takeaway from all of this is our developers/designers who actually commit code are much happier working together. Regarding what I am using with Jenkins, there are a few things that changed along the way:

  • We are using Jenkins to manage various build tasks of our web applications. In the case of some of the sites on campus, it will synchronize all the users from ldap into the application, or run cron, or backups, or listen for git commits and update various application environments.
  • I am using fabric with aegir in our development environment to spin up new development sites. When our code gets deployed to dev, it checks if it can get away with updating the codebase of the current platform (ie there are no db changes occurring within the new code coming in). If there are changes, it will spin up a new platform, let aegir know about it, and migrate all sites from the existing platform of that type to the new one. I have run into a few issues in aegir itself (I kept getting issues with migrating a site that took up 3+ gigs of storage), but the platforms and migrating sites to their upgrade is really easy at this stage (this is on an aegir platform with a few d6 and a number of d7 development websites).
  • I ended up installing Ruby and Capistrano to manage our production websites. Since I do not yet fully understand Aegir anyways, I decided it would be better to choose a more agnostic deployment platform (ie, we have a number of sites that are *not* running Drupal and having those get managed with a similar deployment tool is ideal). The reason for choosing Capistrano is because Capistrano already had the kind of functionality that I wanted (rollback, different environments, symlinks, backups, etc). I'd also worked with Capistrano many years ago so it was a face of familiarity. For managing single websites, I deployed and contributed back a few scripts to manage a Drupal application. I'm sure there are many other recipes of this sort out there but this is what helped me.

But this article is really about Jenkins. And to put it simply, it is a boon to the development, deployment, and general application workflow regardless of other tools being used.