SlideShare a Scribd company logo
DOCMAN 
The swiss army knife for Drupal multisite 
http://corp.adyax.com/themes/adyax/logo.png 
docroot management and deployment 
A L E K S E Y T KAC H E N KO A N D A L E K S A N D R T O L S T I KOV 
D E VO P S H T T P : / / B I T. LY /DOCMAN20 1 4
WHO AM I 
Oleksiy Tkachenko 
http://corp.adyax.com/themes/adyax/logo.png 
PM, Drupal architect 
With Drupal from 2007 
With Adyax from 2009 
France / Ukraine
LARGEST DRUPAL SHOP IN EUROPE 
350 PROJECTS 
150 DRUPALERS 
7 YEARS OF GROWTH 
10K HOURS PROJECTS
http://corp.adyax.com/themes/adyax/logo.png BEFORE WE START
/ VAR / WWW 
DOCROOT? 
Acquia: your docroot folder is the root-level of your Drupal 
installation and its websites and contains its files and directories, 
including Drupal's index.php, includes directory, and modules directory.
PROBLEM 1: 
Multiple suppliers need to work with one multisite installation
PROBLEM 1: 
Deployment is painful - fatal errors, incompatibility 
Production environment - never stable 
How to merge and integrate the work of multiple people? 
How to merge and integrate the work of multiple teams?
PROBLEM 2: 
Standard modules, best practices and team discipline
PROBLEM 2: 
No development standards. Panels? Contexts? 
Standards exists, but not respected 
Drupal best-practices are not respected 
Modules in /all or in /default? 
No team discipline (features are overridden, environments omitted, 
etc)
PROBLEM 3: 
Governance
PROBLEM 3: 
Who should update Drupal? 
What modules needs to be updated? 
What is happening in my docroot? 
What are the latest changes and stable versions?
PROBLEM 4: 
How and when?
PROBLEM 4: 
When to run tests? 
How to run tests? 
In which environment?
PROBLEM 5: 
Cloud hosting usually is very limited in multisite management
INTRODUCING DOCMAN 
http://adyax.github.io/docman/ 
# gem install docman
SCHEMA 
GIT: 
PROJECT A 
DOCROOT 
GIT: 
CORE GIT: 
SITES 
GIT: 
CLOUD 
HOOKS 
DOCMAN 
GIT: 
PROJECT B 
GIT: 
COMMON 
GIT: 
PROFILES
! 
! 
! 
! 
REPOSITORIES: CONFIG 
/master 
config.yaml 
|-­‐-­‐ 
config.yaml 
(environments 
config) 
|-­‐-­‐ 
master 
|-­‐-­‐ 
info.yaml 
(Main 
docroot 
build 
config) 
|-­‐-­‐ 
docroot 
| 
|-­‐-­‐ 
info.yaml 
(Main 
docroot 
build 
config) 
| 
|-­‐-­‐ 
after_build.sh 
(executed 
after 
build) 
| 
|-­‐-­‐ 
profiles 
| 
|-­‐-­‐ 
info.yaml 
(Projects 
dir 
build 
config) 
| 
|-­‐-­‐ 
project_profile 
(if 
exists) 
| 
|-­‐-­‐ 
info.yaml 
(Profile 
build 
config) 
| 
|-­‐-­‐ 
after_build.sh 
(executed 
after 
build) 
| 
|-­‐-­‐ 
projects 
| 
|-­‐-­‐ 
info.yaml 
(Projects 
dir 
build 
config) 
| 
|-­‐-­‐ 
project_code 
| 
|-­‐-­‐ 
info.yaml 
(Code 
build 
config) 
| 
|-­‐-­‐ 
after_build.sh 
(executed 
after 
build) 
| 
|-­‐-­‐ 
sites 
| 
|-­‐-­‐ 
info.yaml 
(Docroot 
sites 
dir 
build 
config) 
| 
|-­‐-­‐ 
after_build.sh 
(executed 
after 
build) 
| 
|-­‐-­‐ 
common 
| 
|-­‐-­‐ 
info.yaml 
(SG 
core 
common 
files 
dir 
build 
config) 
| 
|-­‐-­‐ 
after_build.sh 
(executed 
after 
build) 
Template: 
https://github.com/Adyax/docman-config
REPOSITORIES: CONFIG 
config.yaml 
--- 
environments: 
dev: 
deploy_target: git_target 
state: development 
target_checker: 
handler: :ssh 
file_path: /mnt/www/html/subscription_name_dev # Edit this! 
ssh_host: staging-xxxx.prod.hosting.acquia.com # Edit this! 
ssh_user: subscription_name # Edit this! 
test: 
deploy_target: git_target 
state: staging 
target_checker: 
handler: :ssh 
file_path: none 
file_path: /mnt/www/html/subscription_name_dev # Edit this! 
ssh_host: staging-xxxx.prod.hosting.acquia.com # Edit this! 
ssh_user: subscription_name # Edit this! 
prod: 
deploy_target: git_target 
state: stable 
tagger: 
enabled: true 
handler: :option
REPOSITORIES: CONFIG 
master/common/info.yaml 
status: enabled 
type: repo 
repo: git@this-is-your-git-host:common/common.git # Edit this. This is your repository 
with common modules for everyone. 
order: 30 
states: # Git flow! 
development: 
type: branch 
version: develop 
staging: 
type: branch 
version: master 
stable: 
source: 
type: :retrieve_from_repo 
repo: :project_repo 
branch: state_stable 
file: info.yaml 
hooks: 
builder: 
after_execute: 
- type: :script 
location: $INFO$/after_build.sh 
execution_dir: $PROJECT$ 
params: 
- environment 
Common code repo 
described
REPOSITORIES: CONFIG 
master/docroot/info.yaml 
type: repo 
repo: git@this-is-your-git-host:common/drupal-core.git # This is your Drupal repo. 
order: 1 
states: 
development: 
type: branch 
version: master 
staging: 
type: branch 
version: master 
stable: 
type: branch 
version: master 
hooks: 
builder: 
after_execute: 
- type: :script 
location: $INFO$/after_build.sh 
execution_dir: $PROJECT$ 
params: 
- environment Drupal core repo 
described
master/projects/project1/ 
info.yaml 
REPOSITORIES: CONFIG 
type: repo 
repo: git@this-is-your-git-host:project1.git # Edit this. This is your project repository 
with custom code. 
states: 
development: 
type: branch 
version: develop 
staging: 
type: branch 
version: master 
stable: 
source: 
type: :retrieve_from_repo 
repo: :project_repo 
branch: state_stable 
file: info.yaml 
location: $PROJECT$/tools/deploy/$ENVIRONMENT$/after/after.sh 
execution_dir: $ROOT$/docroot 
params: 
- environment 
- type: :script 
location: $PROJECT$/tools/deploy/common/after/after.sh 
execution_dir: $ROOT$/docroot 
params: 
- environment 
Project code repo 
described (not fully)
REPOSITORIES: CORE 
Drupal 7 
! 
! 
! 
Branches: 
develop 
master 
state_stable
REPOSITORIES: SITES 
SITES 
/all 
/default 
/site_a 
/site_b 
sites.php 
Branches: 
develop 
master 
state_stable 
https://github.com/Adyax/docman-sites
REPOSITORIES: PROJECT 
PROJECT A 
/modules 
/themes 
/libraries 
Branches: 
develop 
master 
state_stable 
https://github.com/Adyax/docman-project
! 
! 
! 
! 
REPOSITORIES: CLOUD HOOKS 
/common 
/dev 
/prod 
/samples 
/scripts 
/test 
README.md
FEATURES 
Focused on cloud hosting: Acquia Cloud, Pantheon and others, but not 
limited to. 
Clear separation of the websites code in multisite environments 
Incremental pushes of the finished docroot to the cloud hosting 
Code separation for easy deployment
FEATURES 
Drupal version agnostic Drupal 8 ready! 
Force people to keep features by default, updb, features revert, registry 
rebuild on each push to environments 
IF SOMETHING HURTS, DO IT MORE OFTEN. 
http://evan.bottch.com/2010/05/26/continuous-integration-if-something-hurts-do-it-more- 
often
FEATURES 
Multiple docroots to support? Not a problem! 
Stable & versioned production environment 
Jenkins friendly workflow 
Deployment pipelines organisation (with Jenkins integration) 
http://www.infoq.com/minibooks/continuous-delivery-overview 
Different deployment scenarios achievable through config: 
Continuous integration 
Continuous delivery 
Continuous deployment
LOCAL ENVIRONMENT 
# docman build local development
DEV + STAGE ENVIRONMENT 
# docman build git_target staging 
# docman build git_target development
LIVE ENVIRONMENT 
# docman build git_target stable
AVAILABLE COMMANDS 
$ docman init <dir> <config-repo> 
! 
$ docman build <target> <env> 
! 
$ docman bump stable 
!
AVAILABLE HELPERS 
CHANGELOG file in each repo 
automatically generated using 
commit comments 
! 
VERSION file in each repo 
automatically generated with the 
latest version (all branches) 
! 
info.yaml files everywhere helps 
you with what is what
CASE STUDY 1: BEFORE 
INITIAL CODEBASE 
CLONE 
SITE 2 CODEBASE SITE 3 CODEBASE
CASE STUDY 1: PROBLEMS 
Conflict with Features (modules) on the cloned website 
Manual deployment for each website 
Pain to maintain 
Standards? Which one? 
Code duplication
CASE STUDY 1: AFTER 
GIT: 
SITE A 
DOCROOT docman 
GIT: 
SITE B 
! 
GIT: 
CORE СOMMON 
git GIT: 
SITES
CASE STUDY 2: SERIOUS 
Global company 
Drupal is a company level standard for websites (yay!) 
At least 3 different Drupal shops independently delivering websites 
constantly
CASE STUDY 2: PROBLEMS 
At least 3 different Drupal shops independently delivering websites. 
Maintenance? Each agency defines. 
Standards? Each agency defines. (Panels? Context?) 
Deployment? Approach is different per agency (capistrano, manual, ftp, 
you name it). 
Hosting is in the same place but each time configured differently
CASE STUDY 2: SOLUTION 
GIT: 
SITE A 
GIT: 
SITE B 
DOCROOT Acquia Cloud 
! 
GIT: 
CORE COMMON GIT: 
SITES 
GIT: 
CLOUD 
HOOKS 
INTEGRATION PLATFORM 
git hooks > 
Jenkins > docman 
Gitlab
http://corp.adyax.com/themes/adyax/logo.png DEMO TIME
ROADMAP 
@Todo: Vagrant image generation per website for easy local 
development 
@Todo: wizard to generate repository with configs 
@Todo: Documentation
NEED HELP 
@Todo: Config templates for various cloud hosting systems 
@Todo: Better config error handling 
@Todo: More deployment targets 
@Todo: More docroot templates (Pantheon, Aberdeen Cloud, etc)
http://corp.adyax.com/themes/adyax/logo.png WHAT DID YOU THINK? 
E VA LUAT E T H I S S E S S I O N - http://bit.ly/docman2014 
FOLLOW US @ADYAX 
FOLLOW ME @SHUMUSHIN

More Related Content

PDF
DCEU 18: Dockerfile Best Practices
PPTX
Drupal in Libraries
PDF
DCSF19 Dockerfile Best Practices
PDF
Composer tools and frameworks for drupal.ppt
PPTX
Docker Container As A Service - JAX 2016
PDF
Developing web apps
PDF
Drush in the Composer Era
PDF
Streamline your development environment with docker
DCEU 18: Dockerfile Best Practices
Drupal in Libraries
DCSF19 Dockerfile Best Practices
Composer tools and frameworks for drupal.ppt
Docker Container As A Service - JAX 2016
Developing web apps
Drush in the Composer Era
Streamline your development environment with docker

What's hot (20)

PDF
Docker 導入:障礙與對策
PDF
Docker and DevOps --- new IT culture
PDF
SymfonyCon Madrid 2014 - Rock Solid Deployment of Symfony Apps
PDF
DCSF19 Tips and Tricks of the Docker Captains
PDF
Rh developers fat jar smackdown
PDF
Configuration as Dependency: Managing Drupal 8 Configuration with git and Com...
PDF
Ansible project-deploy
PDF
T3CON12 Flow and TYPO3 deployment with surf
PDF
Developing and Deploying PHP with Docker
PDF
Lessons Learned: Using Concourse In Production
PDF
手把手帶你學Docker 03042017
PDF
Modernize Your Drupal Development
PDF
Drupal Best Practices
PPTX
Docker workshop
PPTX
Pp docker-swarm-doxlon-28th-march-2017
PDF
Puppeteerのお話
PDF
Locally it worked! virtualizing docker
KEY
Scaling Django
PPTX
Composer JSON kills make files
PDF
Dockercon EU 2014
Docker 導入:障礙與對策
Docker and DevOps --- new IT culture
SymfonyCon Madrid 2014 - Rock Solid Deployment of Symfony Apps
DCSF19 Tips and Tricks of the Docker Captains
Rh developers fat jar smackdown
Configuration as Dependency: Managing Drupal 8 Configuration with git and Com...
Ansible project-deploy
T3CON12 Flow and TYPO3 deployment with surf
Developing and Deploying PHP with Docker
Lessons Learned: Using Concourse In Production
手把手帶你學Docker 03042017
Modernize Your Drupal Development
Drupal Best Practices
Docker workshop
Pp docker-swarm-doxlon-28th-march-2017
Puppeteerのお話
Locally it worked! virtualizing docker
Scaling Django
Composer JSON kills make files
Dockercon EU 2014
Ad

Similar to Docman - The swiss army knife for Drupal multisite docroot management and deployment (20)

PDF
Learning Docker with Thomas
PDF
Improving your Drupal 8 development workflow DrupalCampLA
PDF
Face your fears: Drush and Aegir
PDF
Lean Drupal Repositories with Composer and Drush
PDF
Using Docker For Development
PDF
Building and Maintaining a Distribution in Drupal 7 with Features
PDF
Magento Docker Setup.pdf
PDF
Real-World Docker: 10 Things We've Learned
PDF
DCEU 18: Developing with Docker Containers
PPTX
Docker @ FOSS4G 2016, Bonn
PDF
Be a better developer with Docker (revision 3)
PDF
Be a happier developer with Docker: Tricks of the trade
PPTX
Dockerizing a Symfony2 application
PDF
Be a Happier Developer with Docker: Tricks of the Trade
PPTX
Drupal 8 - Improving your development workflow
PDF
Docker 0.11 at MaxCDN meetup in Los Angeles
PDF
Composer tools and frameworks for Drupal
PPTX
tips for generating docker containers complaints with the devsecops
PDF
Docker Dhahran Nov 2016 meetup
PDF
JDD2014: Docker.io - versioned linux containers for JVM devops - Dominik Dorn
Learning Docker with Thomas
Improving your Drupal 8 development workflow DrupalCampLA
Face your fears: Drush and Aegir
Lean Drupal Repositories with Composer and Drush
Using Docker For Development
Building and Maintaining a Distribution in Drupal 7 with Features
Magento Docker Setup.pdf
Real-World Docker: 10 Things We've Learned
DCEU 18: Developing with Docker Containers
Docker @ FOSS4G 2016, Bonn
Be a better developer with Docker (revision 3)
Be a happier developer with Docker: Tricks of the trade
Dockerizing a Symfony2 application
Be a Happier Developer with Docker: Tricks of the Trade
Drupal 8 - Improving your development workflow
Docker 0.11 at MaxCDN meetup in Los Angeles
Composer tools and frameworks for Drupal
tips for generating docker containers complaints with the devsecops
Docker Dhahran Nov 2016 meetup
JDD2014: Docker.io - versioned linux containers for JVM devops - Dominik Dorn
Ad

Recently uploaded (20)

PPTX
CHAPTER 12 - CYBER SECURITY AND FUTURE SKILLS (1) (1).pptx
PDF
Design an Analysis of Algorithms I-SECS-1021-03
PDF
Addressing The Cult of Project Management Tools-Why Disconnected Work is Hold...
PPT
Introduction Database Management System for Course Database
PPTX
ai tools demonstartion for schools and inter college
PDF
Audit Checklist Design Aligning with ISO, IATF, and Industry Standards — Omne...
PPTX
Agentic AI : A Practical Guide. Undersating, Implementing and Scaling Autono...
PDF
T3DD25 TYPO3 Content Blocks - Deep Dive by André Kraus
PPTX
Operating system designcfffgfgggggggvggggggggg
PDF
Upgrade and Innovation Strategies for SAP ERP Customers
PPTX
Introduction to Artificial Intelligence
PDF
Adobe Illustrator 28.6 Crack My Vision of Vector Design
PDF
Wondershare Filmora 15 Crack With Activation Key [2025
PDF
SAP S4 Hana Brochure 3 (PTS SYSTEMS AND SOLUTIONS)
PDF
Internet Downloader Manager (IDM) Crack 6.42 Build 42 Updates Latest 2025
PDF
AI in Product Development-omnex systems
PDF
top salesforce developer skills in 2025.pdf
PPTX
ManageIQ - Sprint 268 Review - Slide Deck
PDF
System and Network Administraation Chapter 3
PDF
System and Network Administration Chapter 2
CHAPTER 12 - CYBER SECURITY AND FUTURE SKILLS (1) (1).pptx
Design an Analysis of Algorithms I-SECS-1021-03
Addressing The Cult of Project Management Tools-Why Disconnected Work is Hold...
Introduction Database Management System for Course Database
ai tools demonstartion for schools and inter college
Audit Checklist Design Aligning with ISO, IATF, and Industry Standards — Omne...
Agentic AI : A Practical Guide. Undersating, Implementing and Scaling Autono...
T3DD25 TYPO3 Content Blocks - Deep Dive by André Kraus
Operating system designcfffgfgggggggvggggggggg
Upgrade and Innovation Strategies for SAP ERP Customers
Introduction to Artificial Intelligence
Adobe Illustrator 28.6 Crack My Vision of Vector Design
Wondershare Filmora 15 Crack With Activation Key [2025
SAP S4 Hana Brochure 3 (PTS SYSTEMS AND SOLUTIONS)
Internet Downloader Manager (IDM) Crack 6.42 Build 42 Updates Latest 2025
AI in Product Development-omnex systems
top salesforce developer skills in 2025.pdf
ManageIQ - Sprint 268 Review - Slide Deck
System and Network Administraation Chapter 3
System and Network Administration Chapter 2

Docman - The swiss army knife for Drupal multisite docroot management and deployment

  • 1. DOCMAN The swiss army knife for Drupal multisite http://corp.adyax.com/themes/adyax/logo.png docroot management and deployment A L E K S E Y T KAC H E N KO A N D A L E K S A N D R T O L S T I KOV D E VO P S H T T P : / / B I T. LY /DOCMAN20 1 4
  • 2. WHO AM I Oleksiy Tkachenko http://corp.adyax.com/themes/adyax/logo.png PM, Drupal architect With Drupal from 2007 With Adyax from 2009 France / Ukraine
  • 3. LARGEST DRUPAL SHOP IN EUROPE 350 PROJECTS 150 DRUPALERS 7 YEARS OF GROWTH 10K HOURS PROJECTS
  • 5. / VAR / WWW DOCROOT? Acquia: your docroot folder is the root-level of your Drupal installation and its websites and contains its files and directories, including Drupal's index.php, includes directory, and modules directory.
  • 6. PROBLEM 1: Multiple suppliers need to work with one multisite installation
  • 7. PROBLEM 1: Deployment is painful - fatal errors, incompatibility Production environment - never stable How to merge and integrate the work of multiple people? How to merge and integrate the work of multiple teams?
  • 8. PROBLEM 2: Standard modules, best practices and team discipline
  • 9. PROBLEM 2: No development standards. Panels? Contexts? Standards exists, but not respected Drupal best-practices are not respected Modules in /all or in /default? No team discipline (features are overridden, environments omitted, etc)
  • 11. PROBLEM 3: Who should update Drupal? What modules needs to be updated? What is happening in my docroot? What are the latest changes and stable versions?
  • 12. PROBLEM 4: How and when?
  • 13. PROBLEM 4: When to run tests? How to run tests? In which environment?
  • 14. PROBLEM 5: Cloud hosting usually is very limited in multisite management
  • 16. SCHEMA GIT: PROJECT A DOCROOT GIT: CORE GIT: SITES GIT: CLOUD HOOKS DOCMAN GIT: PROJECT B GIT: COMMON GIT: PROFILES
  • 17. ! ! ! ! REPOSITORIES: CONFIG /master config.yaml |-­‐-­‐ config.yaml (environments config) |-­‐-­‐ master |-­‐-­‐ info.yaml (Main docroot build config) |-­‐-­‐ docroot | |-­‐-­‐ info.yaml (Main docroot build config) | |-­‐-­‐ after_build.sh (executed after build) | |-­‐-­‐ profiles | |-­‐-­‐ info.yaml (Projects dir build config) | |-­‐-­‐ project_profile (if exists) | |-­‐-­‐ info.yaml (Profile build config) | |-­‐-­‐ after_build.sh (executed after build) | |-­‐-­‐ projects | |-­‐-­‐ info.yaml (Projects dir build config) | |-­‐-­‐ project_code | |-­‐-­‐ info.yaml (Code build config) | |-­‐-­‐ after_build.sh (executed after build) | |-­‐-­‐ sites | |-­‐-­‐ info.yaml (Docroot sites dir build config) | |-­‐-­‐ after_build.sh (executed after build) | |-­‐-­‐ common | |-­‐-­‐ info.yaml (SG core common files dir build config) | |-­‐-­‐ after_build.sh (executed after build) Template: https://github.com/Adyax/docman-config
  • 18. REPOSITORIES: CONFIG config.yaml --- environments: dev: deploy_target: git_target state: development target_checker: handler: :ssh file_path: /mnt/www/html/subscription_name_dev # Edit this! ssh_host: staging-xxxx.prod.hosting.acquia.com # Edit this! ssh_user: subscription_name # Edit this! test: deploy_target: git_target state: staging target_checker: handler: :ssh file_path: none file_path: /mnt/www/html/subscription_name_dev # Edit this! ssh_host: staging-xxxx.prod.hosting.acquia.com # Edit this! ssh_user: subscription_name # Edit this! prod: deploy_target: git_target state: stable tagger: enabled: true handler: :option
  • 19. REPOSITORIES: CONFIG master/common/info.yaml status: enabled type: repo repo: git@this-is-your-git-host:common/common.git # Edit this. This is your repository with common modules for everyone. order: 30 states: # Git flow! development: type: branch version: develop staging: type: branch version: master stable: source: type: :retrieve_from_repo repo: :project_repo branch: state_stable file: info.yaml hooks: builder: after_execute: - type: :script location: $INFO$/after_build.sh execution_dir: $PROJECT$ params: - environment Common code repo described
  • 20. REPOSITORIES: CONFIG master/docroot/info.yaml type: repo repo: git@this-is-your-git-host:common/drupal-core.git # This is your Drupal repo. order: 1 states: development: type: branch version: master staging: type: branch version: master stable: type: branch version: master hooks: builder: after_execute: - type: :script location: $INFO$/after_build.sh execution_dir: $PROJECT$ params: - environment Drupal core repo described
  • 21. master/projects/project1/ info.yaml REPOSITORIES: CONFIG type: repo repo: git@this-is-your-git-host:project1.git # Edit this. This is your project repository with custom code. states: development: type: branch version: develop staging: type: branch version: master stable: source: type: :retrieve_from_repo repo: :project_repo branch: state_stable file: info.yaml location: $PROJECT$/tools/deploy/$ENVIRONMENT$/after/after.sh execution_dir: $ROOT$/docroot params: - environment - type: :script location: $PROJECT$/tools/deploy/common/after/after.sh execution_dir: $ROOT$/docroot params: - environment Project code repo described (not fully)
  • 22. REPOSITORIES: CORE Drupal 7 ! ! ! Branches: develop master state_stable
  • 23. REPOSITORIES: SITES SITES /all /default /site_a /site_b sites.php Branches: develop master state_stable https://github.com/Adyax/docman-sites
  • 24. REPOSITORIES: PROJECT PROJECT A /modules /themes /libraries Branches: develop master state_stable https://github.com/Adyax/docman-project
  • 25. ! ! ! ! REPOSITORIES: CLOUD HOOKS /common /dev /prod /samples /scripts /test README.md
  • 26. FEATURES Focused on cloud hosting: Acquia Cloud, Pantheon and others, but not limited to. Clear separation of the websites code in multisite environments Incremental pushes of the finished docroot to the cloud hosting Code separation for easy deployment
  • 27. FEATURES Drupal version agnostic Drupal 8 ready! Force people to keep features by default, updb, features revert, registry rebuild on each push to environments IF SOMETHING HURTS, DO IT MORE OFTEN. http://evan.bottch.com/2010/05/26/continuous-integration-if-something-hurts-do-it-more- often
  • 28. FEATURES Multiple docroots to support? Not a problem! Stable & versioned production environment Jenkins friendly workflow Deployment pipelines organisation (with Jenkins integration) http://www.infoq.com/minibooks/continuous-delivery-overview Different deployment scenarios achievable through config: Continuous integration Continuous delivery Continuous deployment
  • 29. LOCAL ENVIRONMENT # docman build local development
  • 30. DEV + STAGE ENVIRONMENT # docman build git_target staging # docman build git_target development
  • 31. LIVE ENVIRONMENT # docman build git_target stable
  • 32. AVAILABLE COMMANDS $ docman init <dir> <config-repo> ! $ docman build <target> <env> ! $ docman bump stable !
  • 33. AVAILABLE HELPERS CHANGELOG file in each repo automatically generated using commit comments ! VERSION file in each repo automatically generated with the latest version (all branches) ! info.yaml files everywhere helps you with what is what
  • 34. CASE STUDY 1: BEFORE INITIAL CODEBASE CLONE SITE 2 CODEBASE SITE 3 CODEBASE
  • 35. CASE STUDY 1: PROBLEMS Conflict with Features (modules) on the cloned website Manual deployment for each website Pain to maintain Standards? Which one? Code duplication
  • 36. CASE STUDY 1: AFTER GIT: SITE A DOCROOT docman GIT: SITE B ! GIT: CORE СOMMON git GIT: SITES
  • 37. CASE STUDY 2: SERIOUS Global company Drupal is a company level standard for websites (yay!) At least 3 different Drupal shops independently delivering websites constantly
  • 38. CASE STUDY 2: PROBLEMS At least 3 different Drupal shops independently delivering websites. Maintenance? Each agency defines. Standards? Each agency defines. (Panels? Context?) Deployment? Approach is different per agency (capistrano, manual, ftp, you name it). Hosting is in the same place but each time configured differently
  • 39. CASE STUDY 2: SOLUTION GIT: SITE A GIT: SITE B DOCROOT Acquia Cloud ! GIT: CORE COMMON GIT: SITES GIT: CLOUD HOOKS INTEGRATION PLATFORM git hooks > Jenkins > docman Gitlab
  • 41. ROADMAP @Todo: Vagrant image generation per website for easy local development @Todo: wizard to generate repository with configs @Todo: Documentation
  • 42. NEED HELP @Todo: Config templates for various cloud hosting systems @Todo: Better config error handling @Todo: More deployment targets @Todo: More docroot templates (Pantheon, Aberdeen Cloud, etc)
  • 43. http://corp.adyax.com/themes/adyax/logo.png WHAT DID YOU THINK? E VA LUAT E T H I S S E S S I O N - http://bit.ly/docman2014 FOLLOW US @ADYAX FOLLOW ME @SHUMUSHIN