docman - the swiss army knife for drupal multisite docroot management and deployment
DESCRIPTION
Introducing Docman (available on github, alpha state, but used already in production environment): the Swiss Army Knife for Drupal multisite docroot management and deployment. Docman acts as a layer between your docroot – usually a git repository somewhere, but not limited to it– and multiple vendors working on different websites using your standards and predefined sets of modules.TRANSCRIPT
![Page 1: Docman - The swiss army knife for Drupal multisite docroot management and deployment](https://reader034.vdocuments.us/reader034/viewer/2022051513/547e82d1b479599d508b4be1/html5/thumbnails/1.jpg)
http://corp.adyax.com/themes/adyax/logo.png
D E V O P S H T T P : / / B I T . L Y / D O C M A N 2 0 1 4
DOCMAN
A L E K S E Y T K A C H E N K O A N D A L E K S A N D R T O L S T I K O V
The swiss army knife for Drupal multisite docroot management and deployment
![Page 2: Docman - The swiss army knife for Drupal multisite docroot management and deployment](https://reader034.vdocuments.us/reader034/viewer/2022051513/547e82d1b479599d508b4be1/html5/thumbnails/2.jpg)
http://corp.adyax.com/themes/adyax/logo.png
WHO AM IOleksiy Tkachenko
With Drupal from 2007With Adyax from 2009
PM, Drupal architect
France / Ukraine
![Page 3: Docman - The swiss army knife for Drupal multisite docroot management and deployment](https://reader034.vdocuments.us/reader034/viewer/2022051513/547e82d1b479599d508b4be1/html5/thumbnails/3.jpg)
LARGEST DRUPAL SHOP IN EUROPE
350 PROJECTS 150 DRUPALERS
7 YEARS OF GROWTH 10K HOURS PROJECTS
![Page 4: Docman - The swiss army knife for Drupal multisite docroot management and deployment](https://reader034.vdocuments.us/reader034/viewer/2022051513/547e82d1b479599d508b4be1/html5/thumbnails/4.jpg)
http://corp.adyax.com/themes/adyax/logo.pngBEFORE WE START
![Page 5: Docman - The swiss army knife for Drupal multisite docroot management and deployment](https://reader034.vdocuments.us/reader034/viewer/2022051513/547e82d1b479599d508b4be1/html5/thumbnails/5.jpg)
/ VAR / WWW
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.
DOCROOT?
![Page 6: Docman - The swiss army knife for Drupal multisite docroot management and deployment](https://reader034.vdocuments.us/reader034/viewer/2022051513/547e82d1b479599d508b4be1/html5/thumbnails/6.jpg)
PROBLEM 1:Multiple suppliers need to work with one multisite installation
![Page 7: Docman - The swiss army knife for Drupal multisite docroot management and deployment](https://reader034.vdocuments.us/reader034/viewer/2022051513/547e82d1b479599d508b4be1/html5/thumbnails/7.jpg)
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?
![Page 8: Docman - The swiss army knife for Drupal multisite docroot management and deployment](https://reader034.vdocuments.us/reader034/viewer/2022051513/547e82d1b479599d508b4be1/html5/thumbnails/8.jpg)
PROBLEM 2:
Standard modules, best practices and team discipline
![Page 9: Docman - The swiss army knife for Drupal multisite docroot management and deployment](https://reader034.vdocuments.us/reader034/viewer/2022051513/547e82d1b479599d508b4be1/html5/thumbnails/9.jpg)
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)
![Page 10: Docman - The swiss army knife for Drupal multisite docroot management and deployment](https://reader034.vdocuments.us/reader034/viewer/2022051513/547e82d1b479599d508b4be1/html5/thumbnails/10.jpg)
PROBLEM 3:Governance
![Page 11: Docman - The swiss army knife for Drupal multisite docroot management and deployment](https://reader034.vdocuments.us/reader034/viewer/2022051513/547e82d1b479599d508b4be1/html5/thumbnails/11.jpg)
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?
![Page 12: Docman - The swiss army knife for Drupal multisite docroot management and deployment](https://reader034.vdocuments.us/reader034/viewer/2022051513/547e82d1b479599d508b4be1/html5/thumbnails/12.jpg)
PROBLEM 4:How and when?
![Page 13: Docman - The swiss army knife for Drupal multisite docroot management and deployment](https://reader034.vdocuments.us/reader034/viewer/2022051513/547e82d1b479599d508b4be1/html5/thumbnails/13.jpg)
PROBLEM 4:
When to run tests?
How to run tests?
In which environment?
![Page 14: Docman - The swiss army knife for Drupal multisite docroot management and deployment](https://reader034.vdocuments.us/reader034/viewer/2022051513/547e82d1b479599d508b4be1/html5/thumbnails/14.jpg)
PROBLEM 5:
Cloud hosting usually is very limited in multisite management
![Page 15: Docman - The swiss army knife for Drupal multisite docroot management and deployment](https://reader034.vdocuments.us/reader034/viewer/2022051513/547e82d1b479599d508b4be1/html5/thumbnails/15.jpg)
INTRODUCING DOCMAN
# gem install docman
http://adyax.github.io/docman/
![Page 16: Docman - The swiss army knife for Drupal multisite docroot management and deployment](https://reader034.vdocuments.us/reader034/viewer/2022051513/547e82d1b479599d508b4be1/html5/thumbnails/16.jpg)
SCHEMA
GIT: PROJECT A
GIT: CORE GIT:
SITESGIT:
CLOUD HOOKS
DOCMAN
DOCROOT
GIT: PROJECT B
GIT: COMMON
GIT: PROFILES
![Page 17: Docman - The swiss army knife for Drupal multisite docroot management and deployment](https://reader034.vdocuments.us/reader034/viewer/2022051513/547e82d1b479599d508b4be1/html5/thumbnails/17.jpg)
!!!!
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)
https://github.com/Adyax/docman-configTemplate:
![Page 18: Docman - The swiss army knife for Drupal multisite docroot management and deployment](https://reader034.vdocuments.us/reader034/viewer/2022051513/547e82d1b479599d508b4be1/html5/thumbnails/18.jpg)
config.yaml
REPOSITORIES: CONFIG--- 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
![Page 19: Docman - The swiss army knife for Drupal multisite docroot management and deployment](https://reader034.vdocuments.us/reader034/viewer/2022051513/547e82d1b479599d508b4be1/html5/thumbnails/19.jpg)
master/common/info.yaml
REPOSITORIES: CONFIGstatus: 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
![Page 20: Docman - The swiss army knife for Drupal multisite docroot management and deployment](https://reader034.vdocuments.us/reader034/viewer/2022051513/547e82d1b479599d508b4be1/html5/thumbnails/20.jpg)
master/docroot/info.yaml
REPOSITORIES: CONFIG
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
![Page 21: Docman - The swiss army knife for Drupal multisite docroot management and deployment](https://reader034.vdocuments.us/reader034/viewer/2022051513/547e82d1b479599d508b4be1/html5/thumbnails/21.jpg)
master/projects/project1/info.yaml
REPOSITORIES: CONFIGtype: 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)
![Page 22: Docman - The swiss army knife for Drupal multisite docroot management and deployment](https://reader034.vdocuments.us/reader034/viewer/2022051513/547e82d1b479599d508b4be1/html5/thumbnails/22.jpg)
Drupal 7 !!!
REPOSITORIES: CORE
Branches: develop master
state_stable
![Page 23: Docman - The swiss army knife for Drupal multisite docroot management and deployment](https://reader034.vdocuments.us/reader034/viewer/2022051513/547e82d1b479599d508b4be1/html5/thumbnails/23.jpg)
REPOSITORIES: SITES
SITES
/all /default /site_a /site_b sites.php
Branches: develop master
state_stable
https://github.com/Adyax/docman-sites
![Page 24: Docman - The swiss army knife for Drupal multisite docroot management and deployment](https://reader034.vdocuments.us/reader034/viewer/2022051513/547e82d1b479599d508b4be1/html5/thumbnails/24.jpg)
/modules /themes /libraries
REPOSITORIES: PROJECT
PROJECT A
Branches: develop master
state_stable
https://github.com/Adyax/docman-project
![Page 25: Docman - The swiss army knife for Drupal multisite docroot management and deployment](https://reader034.vdocuments.us/reader034/viewer/2022051513/547e82d1b479599d508b4be1/html5/thumbnails/25.jpg)
!!!!
REPOSITORIES: CLOUD HOOKS
/common /dev /prod /samples /scripts /test README.md
![Page 26: Docman - The swiss army knife for Drupal multisite docroot management and deployment](https://reader034.vdocuments.us/reader034/viewer/2022051513/547e82d1b479599d508b4be1/html5/thumbnails/26.jpg)
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
![Page 27: Docman - The swiss army knife for Drupal multisite docroot management and deployment](https://reader034.vdocuments.us/reader034/viewer/2022051513/547e82d1b479599d508b4be1/html5/thumbnails/27.jpg)
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
![Page 28: Docman - The swiss army knife for Drupal multisite docroot management and deployment](https://reader034.vdocuments.us/reader034/viewer/2022051513/547e82d1b479599d508b4be1/html5/thumbnails/28.jpg)
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
![Page 29: Docman - The swiss army knife for Drupal multisite docroot management and deployment](https://reader034.vdocuments.us/reader034/viewer/2022051513/547e82d1b479599d508b4be1/html5/thumbnails/29.jpg)
LOCAL ENVIRONMENT
# docman build local development
![Page 30: Docman - The swiss army knife for Drupal multisite docroot management and deployment](https://reader034.vdocuments.us/reader034/viewer/2022051513/547e82d1b479599d508b4be1/html5/thumbnails/30.jpg)
DEV + STAGE ENVIRONMENT
# docman build git_target staging
# docman build git_target development
![Page 31: Docman - The swiss army knife for Drupal multisite docroot management and deployment](https://reader034.vdocuments.us/reader034/viewer/2022051513/547e82d1b479599d508b4be1/html5/thumbnails/31.jpg)
LIVE ENVIRONMENT
# docman build git_target stable
![Page 32: Docman - The swiss army knife for Drupal multisite docroot management and deployment](https://reader034.vdocuments.us/reader034/viewer/2022051513/547e82d1b479599d508b4be1/html5/thumbnails/32.jpg)
AVAILABLE COMMANDS
$ docman init <dir> <config-repo> !$ docman build <target> <env> !$ docman bump stable
!
![Page 33: Docman - The swiss army knife for Drupal multisite docroot management and deployment](https://reader034.vdocuments.us/reader034/viewer/2022051513/547e82d1b479599d508b4be1/html5/thumbnails/33.jpg)
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
![Page 34: Docman - The swiss army knife for Drupal multisite docroot management and deployment](https://reader034.vdocuments.us/reader034/viewer/2022051513/547e82d1b479599d508b4be1/html5/thumbnails/34.jpg)
CASE STUDY 1: BEFORE
INITIAL CODEBASE
CLONE
SITE 2 CODEBASE SITE 3 CODEBASE
![Page 35: Docman - The swiss army knife for Drupal multisite docroot management and deployment](https://reader034.vdocuments.us/reader034/viewer/2022051513/547e82d1b479599d508b4be1/html5/thumbnails/35.jpg)
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
![Page 36: Docman - The swiss army knife for Drupal multisite docroot management and deployment](https://reader034.vdocuments.us/reader034/viewer/2022051513/547e82d1b479599d508b4be1/html5/thumbnails/36.jpg)
CASE STUDY 1: AFTER
GIT: SITE A
GIT: SITE B
!GIT:
COREСOMMON
DOCROOT docman
gitGIT: SITES
![Page 37: Docman - The swiss army knife for Drupal multisite docroot management and deployment](https://reader034.vdocuments.us/reader034/viewer/2022051513/547e82d1b479599d508b4be1/html5/thumbnails/37.jpg)
CASE STUDY 2: SERIOUS
Drupal is a company level standard for websites (yay!)
Global company
At least 3 different Drupal shops independently delivering websites constantly
![Page 38: Docman - The swiss army knife for Drupal multisite docroot management and deployment](https://reader034.vdocuments.us/reader034/viewer/2022051513/547e82d1b479599d508b4be1/html5/thumbnails/38.jpg)
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
![Page 39: Docman - The swiss army knife for Drupal multisite docroot management and deployment](https://reader034.vdocuments.us/reader034/viewer/2022051513/547e82d1b479599d508b4be1/html5/thumbnails/39.jpg)
CASE STUDY 2: SOLUTION
GIT: SITE A
GIT: SITE B
!GIT:
CORECOMMON GIT:
SITESGIT:
CLOUD HOOKS
INTEGRATION PLATFORM
DOCROOT Acquia Cloud
git hooks > Jenkins > docman
Gitlab
![Page 40: Docman - The swiss army knife for Drupal multisite docroot management and deployment](https://reader034.vdocuments.us/reader034/viewer/2022051513/547e82d1b479599d508b4be1/html5/thumbnails/40.jpg)
http://corp.adyax.com/themes/adyax/logo.pngDEMO TIME
![Page 41: Docman - The swiss army knife for Drupal multisite docroot management and deployment](https://reader034.vdocuments.us/reader034/viewer/2022051513/547e82d1b479599d508b4be1/html5/thumbnails/41.jpg)
ROADMAP
@Todo: Vagrant image generation per website for easy local development
@Todo: wizard to generate repository with configs
@Todo: Documentation
![Page 42: Docman - The swiss army knife for Drupal multisite docroot management and deployment](https://reader034.vdocuments.us/reader034/viewer/2022051513/547e82d1b479599d508b4be1/html5/thumbnails/42.jpg)
NEED HELP
@Todo: Config templates for various cloud hosting systems
@Todo: More deployment targets
@Todo: More docroot templates (Pantheon, Aberdeen Cloud, etc)
@Todo: Better config error handling
![Page 43: Docman - The swiss army knife for Drupal multisite docroot management and deployment](https://reader034.vdocuments.us/reader034/viewer/2022051513/547e82d1b479599d508b4be1/html5/thumbnails/43.jpg)
http://corp.adyax.com/themes/adyax/logo.pngWHAT DID YOU THINK?
E V A L U A T E T H I S S E S S I O N - http://bit.ly/docman2014
FOLLOW US @ADYAXFOLLOW ME @SHUMUSHIN