Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Drupal and Continuous Integration

00784b122fb6dc6f5c22c0197ded0461?s=47 humansky
February 01, 2014

Drupal and Continuous Integration

Continuous Integration (CI) is the practice, in software engineering, of merging all developer working copies with a shared mainline several times a day [1]. Implementing CI in Drupal 7 can be tedious, but I will go into some of the tools and techniques we use at Princeton University to implement a CI workflow.

In this session we will explore some of the benefits and advantages you get from implementing CI, along with sample workflows and tools, such as Git, Jenkins, and the Drupal Features module.

[1] https://en.wikipedia.org/wiki/Continuous_integration



February 01, 2014


  1. Drupal and Continuous Integration DrupalCampNJ - 2014

  2. Who we are Henry Umansky Princeton University humansky@princeton. edu Jason

    Howe Drew University jhowe@drew.edu
  3. What is Continuous Integration? “Continuous Integration is a software development

    practice where members of a team integrate their work frequently, usually each person integrates at least daily - leading to multiple integrations per day.” -Martin Fowler
  4. Principles of CI? • Maintain a code repository • Automate

    the build • Make the build self-testing • Everyone commits to the baseline every day • Every commit (to baseline) should be built • Keep the build fast
  5. Principles of CI (cont’d) • Test in a clone of

    the production environment • Make it easy to get the latest deliverables • Everyone can see the results of the latest build • Automate deployment
  6. Advantages of CI • prevent integration problems • identify failing

    code early • immediate unit testing of all changes • "current" build for testing, demo, or releases
  7. Disadvantages of CI • Initial setup time required • Well-developed

    test-suite required to achieve automated testing advantages
  8. Maintain a code repository • Version Control Systems: git or

    svn • use Features as much as possible • Strongarm Module
  9. Automate the Build • Hudson/Jenkins • Drush • Build triggers

  10. Make the build self-testing • Drupal Coder Review/Security Review •

    Code Quality - [ php | css | js ] lint • PhantomJS and Selenium • Checkstyles/PHPMD
  11. Daily Commits • Commit at least once a day •

    Reduces potential conflicts • Triggers automated builds
  12. Demo

  13. Automated Deployment • Identical /dev/qa/prod systems • Trivial to move

    code between environments • Single button click to perform complex tasks
  14. Automated Deployment • Single button click to deploy production code

    to n webservers. • Deployment is simply a “git pull”, executed via remote ssh. • Auto deployment to dev upon code commit to dev.
  15. Achieving Identical Environments • Everything has to be automated, no

    lovingly handcrafted environments. • Bash script fired by Jenkins, builds databases, instantiates drupal instance in all environments. • Tools to sync content from prod->dev and code from dev->prod
  16. Known state of environments • You always know that Dev

    contains everyone’s latest contributions. • You always know that Prod is a copy of what’s in the repo.
  17. From the Operations Perspective • Keep Server configs in (my.cnf,

    http.conf, etc) in a configuration repository. • New webhead is trivial: ◦ checkout config repo and run setup script. ◦ symlinks config files, checkout drupal. ◦ Essentially a self-configuring server • Works for DR too!
  18. Other Advantages for Ops • Knowing, without a doubt the

    current system state. • Ability to spin up a test environment in minutes. • Aids in troubleshooting and quick issue resolution. (Good comments commits help too)
  19. Questions?