docman : ultimate solution to manage site factories using drupal

43
http://corp.adyax.com/themes/adyax/logo.png DEVOPS HTTP://BIT.LY/DOCMAN2014 DOCMAN ALEKSEY TKACHENKO AND ALEKSANDR TOLSTIKOV The swiss army knife for Drupal multisite docroot management and deployment

Upload: adyax

Post on 14-Dec-2014

459 views

Category:

Internet


3 download

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. Remember how hosting sales teams always tried to push you to buy more docroots "because otherwise it would be hard to manage websites in a Drupal multisite environment"? Docman can simplify your life so you will be able to stick to one docroot and multiple independent websites in it using the same Drupal core. Have you ever tried to oblige different vendors to work with one Drupal core for completely different websites, inside a multisite environment, without making them break everything and with clear deployment schema? Find out how docman can make the once daunting task of multisite deployment more efficient. Does the governance of multiple projects in one multisite environment scare you? Docman has hooks, like Drupal, to launch your tests whenever needed and for each website in multisite environment independently. During this presentation you will peek inside the inner workings of the docman tool and see: All the advantages it will bring to your multisite /single doc root deployments A real-world case study of setting up a stable platform using this concept and the tools needed A development process using docman ('docman build local development' command and others) Real-world example: You have a docroot at Acquia Cloud You have a small governance team setting up standards (Drupal core, list of contrib modules) You have 3 vendors working on three different websites in multisite environment

TRANSCRIPT

Page 1: Docman : ultimate solution to manage site factories using Drupal

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 : ultimate solution to manage site factories using Drupal

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 : ultimate solution to manage site factories using Drupal

LARGEST DRUPAL SHOP IN EUROPE

350 PROJECTS 150 DRUPALERS

7 YEARS OF GROWTH 10K HOURS PROJECTS

Page 4: Docman : ultimate solution to manage site factories using Drupal

http://corp.adyax.com/themes/adyax/logo.pngBEFORE WE START

Page 5: Docman : ultimate solution to manage site factories using Drupal

/ 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 : ultimate solution to manage site factories using Drupal

PROBLEM 1:Multiple suppliers need to work with one multisite installation

Page 7: Docman : ultimate solution to manage site factories using Drupal

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 : ultimate solution to manage site factories using Drupal

PROBLEM 2:

Standard modules, best practices and team discipline

Page 9: Docman : ultimate solution to manage site factories using Drupal

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 : ultimate solution to manage site factories using Drupal

PROBLEM 3:Governance

Page 11: Docman : ultimate solution to manage site factories using Drupal

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 : ultimate solution to manage site factories using Drupal

PROBLEM 4:How and when?

Page 13: Docman : ultimate solution to manage site factories using Drupal

PROBLEM 4:

When to run tests?

How to run tests?

In which environment?

Page 14: Docman : ultimate solution to manage site factories using Drupal

PROBLEM 5:

Cloud hosting usually is very limited in multisite management

Page 15: Docman : ultimate solution to manage site factories using Drupal

INTRODUCING DOCMAN

# gem install docman

http://adyax.github.io/docman/

Page 16: Docman : ultimate solution to manage site factories using Drupal

SCHEMA

GIT: PROJECT A

GIT: CORE GIT:

SITESGIT:

CLOUD HOOKS

DOCMAN

DOCROOT

GIT: PROJECT B

GIT: COMMON

GIT: PROFILES

Page 17: Docman : ultimate solution to manage site factories using Drupal

!!!!

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 : ultimate solution to manage site factories using Drupal

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 : ultimate solution to manage site factories using Drupal

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 : ultimate solution to manage site factories using Drupal

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 : ultimate solution to manage site factories using Drupal

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 : ultimate solution to manage site factories using Drupal

Drupal 7 !!!

REPOSITORIES: CORE

Branches: develop master

state_stable

Page 23: Docman : ultimate solution to manage site factories using Drupal

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 : ultimate solution to manage site factories using Drupal

/modules /themes /libraries

REPOSITORIES: PROJECT

PROJECT A

Branches: develop master

state_stable

https://github.com/Adyax/docman-project

Page 25: Docman : ultimate solution to manage site factories using Drupal

!!!!

REPOSITORIES: CLOUD HOOKS

/common /dev /prod /samples /scripts /test README.md

Page 26: Docman : ultimate solution to manage site factories using Drupal

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 : ultimate solution to manage site factories using Drupal

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 : ultimate solution to manage site factories using Drupal

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 : ultimate solution to manage site factories using Drupal

LOCAL ENVIRONMENT

# docman build local development

Page 30: Docman : ultimate solution to manage site factories using Drupal

DEV + STAGE ENVIRONMENT

# docman build git_target staging

# docman build git_target development

Page 31: Docman : ultimate solution to manage site factories using Drupal

LIVE ENVIRONMENT

# docman build git_target stable

Page 32: Docman : ultimate solution to manage site factories using Drupal

AVAILABLE COMMANDS

$ docman init <dir> <config-repo> !$ docman build <target> <env> !$ docman bump stable

!

Page 33: Docman : ultimate solution to manage site factories using Drupal

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 : ultimate solution to manage site factories using Drupal

CASE STUDY 1: BEFORE

INITIAL CODEBASE

CLONE

SITE 2 CODEBASE SITE 3 CODEBASE

Page 35: Docman : ultimate solution to manage site factories using Drupal

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 : ultimate solution to manage site factories using Drupal

CASE STUDY 1: AFTER

GIT: SITE A

GIT: SITE B

!GIT:

COREСOMMON

DOCROOT docman

gitGIT: SITES

Page 37: Docman : ultimate solution to manage site factories using Drupal

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 : ultimate solution to manage site factories using Drupal

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 : ultimate solution to manage site factories using Drupal

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 : ultimate solution to manage site factories using Drupal

http://corp.adyax.com/themes/adyax/logo.pngDEMO TIME

Page 41: Docman : ultimate solution to manage site factories using Drupal

ROADMAP

@Todo: Vagrant image generation per website for easy local development

@Todo: wizard to generate repository with configs

@Todo: Documentation

Page 42: Docman : ultimate solution to manage site factories using Drupal

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 : ultimate solution to manage site factories using Drupal

http://corp.adyax.com/themes/adyax/logo.pngWHAT D ID YOU TH INK?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