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

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

Embed Size (px)

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.

Citation preview

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

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

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

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

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

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

/ 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

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

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

PROBLEM 2:

Standard modules, best practices and team discipline

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

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

PROBLEM 3:Governance

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

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

PROBLEM 4:How and when?

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

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

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

INTRODUCING DOCMAN

# gem install docman

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

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

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

!!!!

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

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

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

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

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

Drupal 7 !!!

REPOSITORIES: CORE

Branches: develop master

state_stable

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

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

/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

!!!!

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

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

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

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

LOCAL ENVIRONMENT

# docman build local development

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

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

LIVE ENVIRONMENT

# docman build git_target stable

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

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

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

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

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

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

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

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

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

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

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

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

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

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