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. Drupal and Continuous Integration
    DrupalCampNJ - 2014

    View full-size slide

  2. Who we are
    Henry Umansky
    Princeton University
    humansky@princeton.
    edu
    Jason Howe
    Drew University
    [email protected]

    View full-size slide

  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

    View full-size slide

  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

    View full-size slide

  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

    View full-size slide

  6. Advantages of CI
    ● prevent integration problems
    ● identify failing code early
    ● immediate unit testing of all changes
    ● "current" build for testing, demo, or releases

    View full-size slide

  7. Disadvantages of CI
    ● Initial setup time required
    ● Well-developed test-suite required to
    achieve automated testing advantages

    View full-size slide

  8. Maintain a code repository
    ● Version Control Systems: git or svn
    ● use Features as much as possible
    ● Strongarm Module

    View full-size slide

  9. Automate the Build
    ● Hudson/Jenkins
    ● Drush
    ● Build triggers

    View full-size slide

  10. Make the build self-testing
    ● Drupal Coder Review/Security Review
    ● Code Quality - [ php | css | js ] lint
    ● PhantomJS and Selenium
    ● Checkstyles/PHPMD

    View full-size slide

  11. Daily Commits
    ● Commit at least once a day
    ● Reduces potential conflicts
    ● Triggers automated builds

    View full-size slide

  12. Automated Deployment
    ● Identical /dev/qa/prod systems
    ● Trivial to move code between environments
    ● Single button click to perform complex tasks

    View full-size slide

  13. 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.

    View full-size slide

  14. 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

    View full-size slide

  15. 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.

    View full-size slide

  16. 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!

    View full-size slide

  17. 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)

    View full-size slide