SlideShare une entreprise Scribd logo
1  sur  43
Télécharger pour lire hors ligne
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 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 
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
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 V A L U A T E T H I S S E S S I O N - http://bit.ly/docman2014 
FOLLOW US @ADYAX 
FOLLOW ME @SHUMUSHIN

Contenu connexe

Plus de Adyax

Estimation de projets Drupal
Estimation de projets DrupalEstimation de projets Drupal
Estimation de projets DrupalAdyax
 
Drupal n'est pas seulement un CMS
Drupal n'est pas seulement un CMSDrupal n'est pas seulement un CMS
Drupal n'est pas seulement un CMSAdyax
 
Drupal fixed budget projets : the art of estimates
Drupal fixed budget projets : the art of estimatesDrupal fixed budget projets : the art of estimates
Drupal fixed budget projets : the art of estimatesAdyax
 
Réaliser un site e-commerce multi-pays et multilingue connecté à SAP
Réaliser un site e-commerce multi-pays et multilingue connecté à SAPRéaliser un site e-commerce multi-pays et multilingue connecté à SAP
Réaliser un site e-commerce multi-pays et multilingue connecté à SAPAdyax
 
Présentation de Drupal
Présentation de DrupalPrésentation de Drupal
Présentation de DrupalAdyax
 
Cours 3/3 - Architecture Web
Cours 3/3 - Architecture WebCours 3/3 - Architecture Web
Cours 3/3 - Architecture WebAdyax
 
Cours 2/3 - Architecture Web
Cours 2/3 - Architecture WebCours 2/3 - Architecture Web
Cours 2/3 - Architecture WebAdyax
 
Cours 1/3 "Architecture Web"
Cours 1/3 "Architecture Web"Cours 1/3 "Architecture Web"
Cours 1/3 "Architecture Web"Adyax
 
Gestion multi-pays & multilingue avec Drupal
Gestion multi-pays & multilingue avec DrupalGestion multi-pays & multilingue avec Drupal
Gestion multi-pays & multilingue avec DrupalAdyax
 
Gestion des médias dans Drupal
Gestion des médias dans DrupalGestion des médias dans Drupal
Gestion des médias dans DrupalAdyax
 
Varnish
VarnishVarnish
VarnishAdyax
 
La mobilité dans Drupal
La mobilité dans DrupalLa mobilité dans Drupal
La mobilité dans DrupalAdyax
 
eCommerce sur Ipad et autres tablettes tactiles
eCommerce sur Ipad et autres tablettes tactileseCommerce sur Ipad et autres tablettes tactiles
eCommerce sur Ipad et autres tablettes tactilesAdyax
 
For a Social Local and Mobile Drupal
For a Social Local and Mobile DrupalFor a Social Local and Mobile Drupal
For a Social Local and Mobile DrupalAdyax
 
Réussir son projet Drupal
Réussir son projet DrupalRéussir son projet Drupal
Réussir son projet DrupalAdyax
 
Drupal usage by example : World Food Programme
Drupal usage by example : World Food ProgrammeDrupal usage by example : World Food Programme
Drupal usage by example : World Food ProgrammeAdyax
 
Learn How and Why Drupal was used for www.gouvernement.fr
Learn How and Why Drupal was used for www.gouvernement.frLearn How and Why Drupal was used for www.gouvernement.fr
Learn How and Why Drupal was used for www.gouvernement.frAdyax
 
Utilisation de MongoDB dans un site Drupal
Utilisation de MongoDB dans un site DrupalUtilisation de MongoDB dans un site Drupal
Utilisation de MongoDB dans un site DrupalAdyax
 
Comment gérer un site à très haut trafic avec Drupal
Comment gérer un site à très haut trafic avec DrupalComment gérer un site à très haut trafic avec Drupal
Comment gérer un site à très haut trafic avec DrupalAdyax
 
Drupal + Magento = meilleure plateforme eCommerce
Drupal + Magento = meilleure plateforme eCommerceDrupal + Magento = meilleure plateforme eCommerce
Drupal + Magento = meilleure plateforme eCommerceAdyax
 

Plus de Adyax (20)

Estimation de projets Drupal
Estimation de projets DrupalEstimation de projets Drupal
Estimation de projets Drupal
 
Drupal n'est pas seulement un CMS
Drupal n'est pas seulement un CMSDrupal n'est pas seulement un CMS
Drupal n'est pas seulement un CMS
 
Drupal fixed budget projets : the art of estimates
Drupal fixed budget projets : the art of estimatesDrupal fixed budget projets : the art of estimates
Drupal fixed budget projets : the art of estimates
 
Réaliser un site e-commerce multi-pays et multilingue connecté à SAP
Réaliser un site e-commerce multi-pays et multilingue connecté à SAPRéaliser un site e-commerce multi-pays et multilingue connecté à SAP
Réaliser un site e-commerce multi-pays et multilingue connecté à SAP
 
Présentation de Drupal
Présentation de DrupalPrésentation de Drupal
Présentation de Drupal
 
Cours 3/3 - Architecture Web
Cours 3/3 - Architecture WebCours 3/3 - Architecture Web
Cours 3/3 - Architecture Web
 
Cours 2/3 - Architecture Web
Cours 2/3 - Architecture WebCours 2/3 - Architecture Web
Cours 2/3 - Architecture Web
 
Cours 1/3 "Architecture Web"
Cours 1/3 "Architecture Web"Cours 1/3 "Architecture Web"
Cours 1/3 "Architecture Web"
 
Gestion multi-pays & multilingue avec Drupal
Gestion multi-pays & multilingue avec DrupalGestion multi-pays & multilingue avec Drupal
Gestion multi-pays & multilingue avec Drupal
 
Gestion des médias dans Drupal
Gestion des médias dans DrupalGestion des médias dans Drupal
Gestion des médias dans Drupal
 
Varnish
VarnishVarnish
Varnish
 
La mobilité dans Drupal
La mobilité dans DrupalLa mobilité dans Drupal
La mobilité dans Drupal
 
eCommerce sur Ipad et autres tablettes tactiles
eCommerce sur Ipad et autres tablettes tactileseCommerce sur Ipad et autres tablettes tactiles
eCommerce sur Ipad et autres tablettes tactiles
 
For a Social Local and Mobile Drupal
For a Social Local and Mobile DrupalFor a Social Local and Mobile Drupal
For a Social Local and Mobile Drupal
 
Réussir son projet Drupal
Réussir son projet DrupalRéussir son projet Drupal
Réussir son projet Drupal
 
Drupal usage by example : World Food Programme
Drupal usage by example : World Food ProgrammeDrupal usage by example : World Food Programme
Drupal usage by example : World Food Programme
 
Learn How and Why Drupal was used for www.gouvernement.fr
Learn How and Why Drupal was used for www.gouvernement.frLearn How and Why Drupal was used for www.gouvernement.fr
Learn How and Why Drupal was used for www.gouvernement.fr
 
Utilisation de MongoDB dans un site Drupal
Utilisation de MongoDB dans un site DrupalUtilisation de MongoDB dans un site Drupal
Utilisation de MongoDB dans un site Drupal
 
Comment gérer un site à très haut trafic avec Drupal
Comment gérer un site à très haut trafic avec DrupalComment gérer un site à très haut trafic avec Drupal
Comment gérer un site à très haut trafic avec Drupal
 
Drupal + Magento = meilleure plateforme eCommerce
Drupal + Magento = meilleure plateforme eCommerceDrupal + Magento = meilleure plateforme eCommerce
Drupal + Magento = meilleure plateforme eCommerce
 

Dernier

Russian Call Girls Pune (Adult Only) 8005736733 Escort Service 24x7 Cash Pay...
Russian Call Girls Pune  (Adult Only) 8005736733 Escort Service 24x7 Cash Pay...Russian Call Girls Pune  (Adult Only) 8005736733 Escort Service 24x7 Cash Pay...
Russian Call Girls Pune (Adult Only) 8005736733 Escort Service 24x7 Cash Pay...SUHANI PANDEY
 
Ganeshkhind ! Call Girls Pune - 450+ Call Girl Cash Payment 8005736733 Neha T...
Ganeshkhind ! Call Girls Pune - 450+ Call Girl Cash Payment 8005736733 Neha T...Ganeshkhind ! Call Girls Pune - 450+ Call Girl Cash Payment 8005736733 Neha T...
Ganeshkhind ! Call Girls Pune - 450+ Call Girl Cash Payment 8005736733 Neha T...SUHANI PANDEY
 
Shikrapur - Call Girls in Pune Neha 8005736733 | 100% Gennuine High Class Ind...
Shikrapur - Call Girls in Pune Neha 8005736733 | 100% Gennuine High Class Ind...Shikrapur - Call Girls in Pune Neha 8005736733 | 100% Gennuine High Class Ind...
Shikrapur - Call Girls in Pune Neha 8005736733 | 100% Gennuine High Class Ind...SUHANI PANDEY
 
( Pune ) VIP Baner Call Girls 🎗️ 9352988975 Sizzling | Escorts | Girls Are Re...
( Pune ) VIP Baner Call Girls 🎗️ 9352988975 Sizzling | Escorts | Girls Are Re...( Pune ) VIP Baner Call Girls 🎗️ 9352988975 Sizzling | Escorts | Girls Are Re...
( Pune ) VIP Baner Call Girls 🎗️ 9352988975 Sizzling | Escorts | Girls Are Re...nilamkumrai
 
Yerawada ] Independent Escorts in Pune - Book 8005736733 Call Girls Available...
Yerawada ] Independent Escorts in Pune - Book 8005736733 Call Girls Available...Yerawada ] Independent Escorts in Pune - Book 8005736733 Call Girls Available...
Yerawada ] Independent Escorts in Pune - Book 8005736733 Call Girls Available...SUHANI PANDEY
 
Russian Call girl in Ajman +971563133746 Ajman Call girl Service
Russian Call girl in Ajman +971563133746 Ajman Call girl ServiceRussian Call girl in Ajman +971563133746 Ajman Call girl Service
Russian Call girl in Ajman +971563133746 Ajman Call girl Servicegwenoracqe6
 
Hire↠Young Call Girls in Tilak nagar (Delhi) ☎️ 9205541914 ☎️ Independent Esc...
Hire↠Young Call Girls in Tilak nagar (Delhi) ☎️ 9205541914 ☎️ Independent Esc...Hire↠Young Call Girls in Tilak nagar (Delhi) ☎️ 9205541914 ☎️ Independent Esc...
Hire↠Young Call Girls in Tilak nagar (Delhi) ☎️ 9205541914 ☎️ Independent Esc...Delhi Call girls
 
Katraj ( Call Girls ) Pune 6297143586 Hot Model With Sexy Bhabi Ready For S...
Katraj ( Call Girls ) Pune  6297143586  Hot Model With Sexy Bhabi Ready For S...Katraj ( Call Girls ) Pune  6297143586  Hot Model With Sexy Bhabi Ready For S...
Katraj ( Call Girls ) Pune 6297143586 Hot Model With Sexy Bhabi Ready For S...tanu pandey
 
VIP Model Call Girls NIBM ( Pune ) Call ON 8005736733 Starting From 5K to 25K...
VIP Model Call Girls NIBM ( Pune ) Call ON 8005736733 Starting From 5K to 25K...VIP Model Call Girls NIBM ( Pune ) Call ON 8005736733 Starting From 5K to 25K...
VIP Model Call Girls NIBM ( Pune ) Call ON 8005736733 Starting From 5K to 25K...SUHANI PANDEY
 
Enjoy Night⚡Call Girls Dlf City Phase 3 Gurgaon >༒8448380779 Escort Service
Enjoy Night⚡Call Girls Dlf City Phase 3 Gurgaon >༒8448380779 Escort ServiceEnjoy Night⚡Call Girls Dlf City Phase 3 Gurgaon >༒8448380779 Escort Service
Enjoy Night⚡Call Girls Dlf City Phase 3 Gurgaon >༒8448380779 Escort ServiceDelhi Call girls
 
Real Men Wear Diapers T Shirts sweatshirt
Real Men Wear Diapers T Shirts sweatshirtReal Men Wear Diapers T Shirts sweatshirt
Real Men Wear Diapers T Shirts sweatshirtrahman018755
 
APNIC Updates presented by Paul Wilson at ARIN 53
APNIC Updates presented by Paul Wilson at ARIN 53APNIC Updates presented by Paul Wilson at ARIN 53
APNIC Updates presented by Paul Wilson at ARIN 53APNIC
 
VIP Call Girls Himatnagar 7001035870 Whatsapp Number, 24/07 Booking
VIP Call Girls Himatnagar 7001035870 Whatsapp Number, 24/07 BookingVIP Call Girls Himatnagar 7001035870 Whatsapp Number, 24/07 Booking
VIP Call Girls Himatnagar 7001035870 Whatsapp Number, 24/07 Bookingdharasingh5698
 
Enjoy Night⚡Call Girls Samalka Delhi >༒8448380779 Escort Service
Enjoy Night⚡Call Girls Samalka Delhi >༒8448380779 Escort ServiceEnjoy Night⚡Call Girls Samalka Delhi >༒8448380779 Escort Service
Enjoy Night⚡Call Girls Samalka Delhi >༒8448380779 Escort ServiceDelhi Call girls
 
Call Girls Sangvi Call Me 7737669865 Budget Friendly No Advance BookingCall G...
Call Girls Sangvi Call Me 7737669865 Budget Friendly No Advance BookingCall G...Call Girls Sangvi Call Me 7737669865 Budget Friendly No Advance BookingCall G...
Call Girls Sangvi Call Me 7737669865 Budget Friendly No Advance BookingCall G...roncy bisnoi
 
Nanded City ( Call Girls ) Pune 6297143586 Hot Model With Sexy Bhabi Ready ...
Nanded City ( Call Girls ) Pune  6297143586  Hot Model With Sexy Bhabi Ready ...Nanded City ( Call Girls ) Pune  6297143586  Hot Model With Sexy Bhabi Ready ...
Nanded City ( Call Girls ) Pune 6297143586 Hot Model With Sexy Bhabi Ready ...tanu pandey
 
Top Rated Pune Call Girls Daund ⟟ 6297143586 ⟟ Call Me For Genuine Sex Servi...
Top Rated  Pune Call Girls Daund ⟟ 6297143586 ⟟ Call Me For Genuine Sex Servi...Top Rated  Pune Call Girls Daund ⟟ 6297143586 ⟟ Call Me For Genuine Sex Servi...
Top Rated Pune Call Girls Daund ⟟ 6297143586 ⟟ Call Me For Genuine Sex Servi...Call Girls in Nagpur High Profile
 
(+971568250507 ))# Young Call Girls in Ajman By Pakistani Call Girls in ...
(+971568250507  ))#  Young Call Girls  in Ajman  By Pakistani Call Girls  in ...(+971568250507  ))#  Young Call Girls  in Ajman  By Pakistani Call Girls  in ...
(+971568250507 ))# Young Call Girls in Ajman By Pakistani Call Girls in ...Escorts Call Girls
 

Dernier (20)

Russian Call Girls Pune (Adult Only) 8005736733 Escort Service 24x7 Cash Pay...
Russian Call Girls Pune  (Adult Only) 8005736733 Escort Service 24x7 Cash Pay...Russian Call Girls Pune  (Adult Only) 8005736733 Escort Service 24x7 Cash Pay...
Russian Call Girls Pune (Adult Only) 8005736733 Escort Service 24x7 Cash Pay...
 
Ganeshkhind ! Call Girls Pune - 450+ Call Girl Cash Payment 8005736733 Neha T...
Ganeshkhind ! Call Girls Pune - 450+ Call Girl Cash Payment 8005736733 Neha T...Ganeshkhind ! Call Girls Pune - 450+ Call Girl Cash Payment 8005736733 Neha T...
Ganeshkhind ! Call Girls Pune - 450+ Call Girl Cash Payment 8005736733 Neha T...
 
(INDIRA) Call Girl Pune Call Now 8250077686 Pune Escorts 24x7
(INDIRA) Call Girl Pune Call Now 8250077686 Pune Escorts 24x7(INDIRA) Call Girl Pune Call Now 8250077686 Pune Escorts 24x7
(INDIRA) Call Girl Pune Call Now 8250077686 Pune Escorts 24x7
 
VVVIP Call Girls In Connaught Place ➡️ Delhi ➡️ 9999965857 🚀 No Advance 24HRS...
VVVIP Call Girls In Connaught Place ➡️ Delhi ➡️ 9999965857 🚀 No Advance 24HRS...VVVIP Call Girls In Connaught Place ➡️ Delhi ➡️ 9999965857 🚀 No Advance 24HRS...
VVVIP Call Girls In Connaught Place ➡️ Delhi ➡️ 9999965857 🚀 No Advance 24HRS...
 
Shikrapur - Call Girls in Pune Neha 8005736733 | 100% Gennuine High Class Ind...
Shikrapur - Call Girls in Pune Neha 8005736733 | 100% Gennuine High Class Ind...Shikrapur - Call Girls in Pune Neha 8005736733 | 100% Gennuine High Class Ind...
Shikrapur - Call Girls in Pune Neha 8005736733 | 100% Gennuine High Class Ind...
 
( Pune ) VIP Baner Call Girls 🎗️ 9352988975 Sizzling | Escorts | Girls Are Re...
( Pune ) VIP Baner Call Girls 🎗️ 9352988975 Sizzling | Escorts | Girls Are Re...( Pune ) VIP Baner Call Girls 🎗️ 9352988975 Sizzling | Escorts | Girls Are Re...
( Pune ) VIP Baner Call Girls 🎗️ 9352988975 Sizzling | Escorts | Girls Are Re...
 
Yerawada ] Independent Escorts in Pune - Book 8005736733 Call Girls Available...
Yerawada ] Independent Escorts in Pune - Book 8005736733 Call Girls Available...Yerawada ] Independent Escorts in Pune - Book 8005736733 Call Girls Available...
Yerawada ] Independent Escorts in Pune - Book 8005736733 Call Girls Available...
 
Russian Call girl in Ajman +971563133746 Ajman Call girl Service
Russian Call girl in Ajman +971563133746 Ajman Call girl ServiceRussian Call girl in Ajman +971563133746 Ajman Call girl Service
Russian Call girl in Ajman +971563133746 Ajman Call girl Service
 
Hire↠Young Call Girls in Tilak nagar (Delhi) ☎️ 9205541914 ☎️ Independent Esc...
Hire↠Young Call Girls in Tilak nagar (Delhi) ☎️ 9205541914 ☎️ Independent Esc...Hire↠Young Call Girls in Tilak nagar (Delhi) ☎️ 9205541914 ☎️ Independent Esc...
Hire↠Young Call Girls in Tilak nagar (Delhi) ☎️ 9205541914 ☎️ Independent Esc...
 
Katraj ( Call Girls ) Pune 6297143586 Hot Model With Sexy Bhabi Ready For S...
Katraj ( Call Girls ) Pune  6297143586  Hot Model With Sexy Bhabi Ready For S...Katraj ( Call Girls ) Pune  6297143586  Hot Model With Sexy Bhabi Ready For S...
Katraj ( Call Girls ) Pune 6297143586 Hot Model With Sexy Bhabi Ready For S...
 
VIP Model Call Girls NIBM ( Pune ) Call ON 8005736733 Starting From 5K to 25K...
VIP Model Call Girls NIBM ( Pune ) Call ON 8005736733 Starting From 5K to 25K...VIP Model Call Girls NIBM ( Pune ) Call ON 8005736733 Starting From 5K to 25K...
VIP Model Call Girls NIBM ( Pune ) Call ON 8005736733 Starting From 5K to 25K...
 
Enjoy Night⚡Call Girls Dlf City Phase 3 Gurgaon >༒8448380779 Escort Service
Enjoy Night⚡Call Girls Dlf City Phase 3 Gurgaon >༒8448380779 Escort ServiceEnjoy Night⚡Call Girls Dlf City Phase 3 Gurgaon >༒8448380779 Escort Service
Enjoy Night⚡Call Girls Dlf City Phase 3 Gurgaon >༒8448380779 Escort Service
 
Real Men Wear Diapers T Shirts sweatshirt
Real Men Wear Diapers T Shirts sweatshirtReal Men Wear Diapers T Shirts sweatshirt
Real Men Wear Diapers T Shirts sweatshirt
 
APNIC Updates presented by Paul Wilson at ARIN 53
APNIC Updates presented by Paul Wilson at ARIN 53APNIC Updates presented by Paul Wilson at ARIN 53
APNIC Updates presented by Paul Wilson at ARIN 53
 
VIP Call Girls Himatnagar 7001035870 Whatsapp Number, 24/07 Booking
VIP Call Girls Himatnagar 7001035870 Whatsapp Number, 24/07 BookingVIP Call Girls Himatnagar 7001035870 Whatsapp Number, 24/07 Booking
VIP Call Girls Himatnagar 7001035870 Whatsapp Number, 24/07 Booking
 
Enjoy Night⚡Call Girls Samalka Delhi >༒8448380779 Escort Service
Enjoy Night⚡Call Girls Samalka Delhi >༒8448380779 Escort ServiceEnjoy Night⚡Call Girls Samalka Delhi >༒8448380779 Escort Service
Enjoy Night⚡Call Girls Samalka Delhi >༒8448380779 Escort Service
 
Call Girls Sangvi Call Me 7737669865 Budget Friendly No Advance BookingCall G...
Call Girls Sangvi Call Me 7737669865 Budget Friendly No Advance BookingCall G...Call Girls Sangvi Call Me 7737669865 Budget Friendly No Advance BookingCall G...
Call Girls Sangvi Call Me 7737669865 Budget Friendly No Advance BookingCall G...
 
Nanded City ( Call Girls ) Pune 6297143586 Hot Model With Sexy Bhabi Ready ...
Nanded City ( Call Girls ) Pune  6297143586  Hot Model With Sexy Bhabi Ready ...Nanded City ( Call Girls ) Pune  6297143586  Hot Model With Sexy Bhabi Ready ...
Nanded City ( Call Girls ) Pune 6297143586 Hot Model With Sexy Bhabi Ready ...
 
Top Rated Pune Call Girls Daund ⟟ 6297143586 ⟟ Call Me For Genuine Sex Servi...
Top Rated  Pune Call Girls Daund ⟟ 6297143586 ⟟ Call Me For Genuine Sex Servi...Top Rated  Pune Call Girls Daund ⟟ 6297143586 ⟟ Call Me For Genuine Sex Servi...
Top Rated Pune Call Girls Daund ⟟ 6297143586 ⟟ Call Me For Genuine Sex Servi...
 
(+971568250507 ))# Young Call Girls in Ajman By Pakistani Call Girls in ...
(+971568250507  ))#  Young Call Girls  in Ajman  By Pakistani Call Girls  in ...(+971568250507  ))#  Young Call Girls  in Ajman  By Pakistani Call Girls  in ...
(+971568250507 ))# Young Call Girls in Ajman By Pakistani Call Girls in ...
 

Docman : ultimate solution to manage site factories using Drupal.

  • 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 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 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
  • 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 V A L U A T E T H I S S E S S I O N - http://bit.ly/docman2014 FOLLOW US @ADYAX FOLLOW ME @SHUMUSHIN