Configuration management tools for Drupal projects

Configuration management is a systems engineering process for establishing and maintaining consistency of a product’s performance, functional, and attributes with its requirements, design, and operational information throughout its life. The configuration management process is used to manage changes throughout the system lifecycle of complex systems, and it’s a requirement  for FISMA compliance.

These are the three stages of a configuration management process:

  • Change Analysis: This includes the process of analyzing proposed changes in the system and how those changes will impact existing componentes, as well as project schedule and cost.
  • Triage: This is the process of accept or reject a requested change in the system according to its priority and impact in the project. Triage is a term from emergency medicine and refers to the assignment of degrees of urgency to wounds or illnesses to decide the order of treatment of a large number of patients or casualties. It connotes that you are allocating a scarce resource, and that there is not enough of the resource to go around, which is true in software development. There will never be enough time or money to add every feature that everyone wants; some changes that seem as though they are desperately needed will not make it into the next release; some features will not be implemented, and some low-priority defects will not be corrected.
  • Bundling: This is the process of grouping together small changes so that developers can handle in bundles, given that a series of small uncoordinated changes are hard to manage. Each bundle requires code review, documentation update, testing, version control, and so on.

We use the following tools to support the stages above:

  • Confluence (wiki): A space to document meetings, requirements, decisions, procedures, and in general anything related to the project. Since Confluence is part of the Jira suite (explained below), it allows to connect / embed Jira tickets into that documentation.
  • Jira (ticketing system): Used to track and document issues or new requirements. Jira supports the Triage and Bundling process with the following features:
    • Ability to prioritize of tickets.
    • Ability to categorize/group tickets by different dimensions (tasks/subtasks, ticket types, tags).
    • Backlog area to store tasks that are not selected for development.
    • Kanban board to visualize the progress of the tasks under development.
    • Ability to group tickets in releases, and automate release notes.
  • Github: Used to track configuration changes, and documentation and conversations about those changes. Github supports the Bundling process with the following features:
    • Pull requests, and the ability to add comments to the code and request changes before they are merged to the main branches.
    • Ability to document and tag releases.
    • Ability to diff changes and clearly see what is being modified.
  • Drupal Features: Used to bundle and store system settings as Drupal modules. Those system settings are actually stored in the database, but Drupal features allows to create snapshots of those settings and override the values stored in the database, making it easy to replicate changes across different environments. This tool not only supports the process of bundling small changes together, but the quality assurance and version control process.
  • Drupal Update Rules: It works with Drupal features, and it’s used to automate the migrating settings across different environments. This is a crucial tool to test the replication of changes in lower environments for every release.
  • Drupal make file: Single file containing a full inventory of Drupal modules, patches and libraries, and it is used by a Drupal command (drush make) to perform updates and apply patches. This supports the quality assurance process of the Bundling stage.
  • Docker containers: Used to keep track of the configuration changes at the server level, and ensure that both lover and production environments are consisten.
  • Jenkins: Used to automate the deployment process, and ensure that all changes are properly applied in every release.