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

Drupal and Continuous Integration

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

humansky

February 01, 2014
Tweet

More Decks by humansky

Other Decks in Technology

Transcript

  1. 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
  2. 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
  3. 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
  4. Advantages of CI • prevent integration problems • identify failing

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

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

    svn • use Features as much as possible • Strongarm Module
  7. Make the build self-testing • Drupal Coder Review/Security Review •

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

    Reduces potential conflicts • Triggers automated builds
  9. Automated Deployment • Identical /dev/qa/prod systems • Trivial to move

    code between environments • Single button click to perform complex tasks
  10. 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.
  11. 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
  12. 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.
  13. 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!
  14. 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)