SlideShare uma empresa Scribd logo
1 de 42
Baixar para ler offline
Best Practices for
Development
Deployment &
Distributions
August 1, 2014
Friday, August 1, 14
Best Practices...
• Defining environments (Dev, Stage, Prod, etc)
• Smooth and Automated deployments
• Distributions and How to use them
• Useful development tools
Mike Potter
Software Architect @ Phase2
Email: mpotter@phase2technology.com
Drupal.org: mpotter
Friday, August 1, 14
Principles & Goals
• Create an easy-to-understand and simple codebase
• Know exactly what code is present in each environment
• Isolate developers to avoid stepping on toes
• Track contributed code and patches
• Automate putting desired code into an environment
• Automate putting desired configuration into an environment
• Test upcoming release code against latest production data/config
Friday, August 1, 14
Environments
Friday, August 1, 14
Environments - DEVelopment
• One for each Individual developer
(whether Local, VMs, or via VHosts)
• Use git-flow branching strategy
• Put Everything into Code!
• Isolate Developers
Development
Integration
Staging / QA
Production
Friday, August 1, 14
Environments - INTegration
• “Integrates” all DEV environments
• Runs on “develop” branch
• First round of testing
• Automated or Manual rebuilding
Development
Integration
Staging / QA
Production
Friday, August 1, 14
Environments - QA (Staging)
• Contains Production Content
• Runs on “release” branches or tags
• Final testing ground
• Used to test hotfixes
• Essentially a copy of Production for the next release
Development
Integration
Staging / QA
Production
Friday, August 1, 14
Environments - PRODuction
• “Database of Record” for Content
• Runs on tagged “master” branch
• Should NEVER manually touch Production
• Use Hotfix process on QA for emergencies
Development
Integration
Staging / QA
Production
Friday, August 1, 14
Deployment
Friday, August 1, 14
Drupal
DB
Images, FilesPHP Code
Development
Integration / Staging
Production
GIT Repo
Code
Code
Images, Files
Images, Files
DB
Content
DB
Content
Configuration
Code
git commit
git push
git pull
Features
rsync
@prod >> @stage
rsync
@stage >> @dev
sql dump
sql restore
sql restore
branch: develop
branch: release
git pull
branch: master DB of Record
Code Files
Database
Content
• CODE is for Developers
• CONTENT is for Production
Friday, August 1, 14
Git Flow
• Each major feature has a branch
• Current release is “master”
• Next release is “develop”
• http://github.com/nvie/gitflow
provides easy git commands
• git flow feature start <name>
git flow feature publish <name>
http://nvie.com/posts/a-successful-git-branching-model/
Friday, August 1, 14
Everything in Code
• Use Features module to export configuration
http://drupal.org/project/features
• Keep it modular! (don’t put everything into one feature)
• Use Features Override module to export site-specific changes
(when using a base distribution)
• Use update-hooks for anything else
(custom hook_update functions in code)
Friday, August 1, 14
Features Strategies
• In general, more, smaller Features is better
• Group by functionality, such as configuration related to a
specific content type
• Keep stuff that is often changed (permissions) separate
from configuration that doesn’t change (fields)
Friday, August 1, 14
Good Feature
gallery (content type)
main_image (field)
gallery_thumbnail (image style)
gallery_view (view)
Bad Feature
gallery_view (view)
content_view (view)
event_view (view)
news_view (view)
user_view (view)
Friday, August 1, 14
Use Update Hooks
• Enable/disable modules
• Update database
• Revert features
(if not using drush fra)
Friday, August 1, 14
Automated Deployment
• Use drush command line tool
• Pull code (git fetch, git checkout branch/tag)
• Rsync files @prod >> @stage (*)
• Run updates (drush updb)
• Revert all features (drush fra -y)
• Clear cache (drush cc all)
• (*) See also the Stage File Proxy module
Friday, August 1, 14
Tools for Continuous Integration
• Open Source : Jenkins, CruiseControl
• Commercial : Bamboo (Atlassian)
• Create jobs to execute automated scripts
• Run job automatically when code changes
Friday, August 1, 14
Distributions
Friday, August 1, 14
Distributions & Profiles
• A Distribution is:
A full copy of Drupal core along with additional modules, themes, and
installation profiles
• A Profile is:
A set of installation instructions
https://www.drupal.org/node/1022020
• Drupal searches in /sites before /profiles
Friday, August 1, 14
Why use Profiles?
• Easily separate common code from site-specific code
• Documents exact module dependencies and patches
(stops you from hacking core)
• Easier to control module updates
• Can build upon other profiles (*)
• Can be more of a “drush make” wrapper rather than
something actually “installed”
Friday, August 1, 14
Module search order
• Drupal searches for modules in this order:
/sites/sitename/modules (for multisites)
/sites/default/modules
/sites/all/modules
/profiles/ProfileName/modules
/profiles/BaseProfileName/modules (if using a base profile)
/modules
• Modules from your Profile are kept separate from
site-specific module overrides
Friday, August 1, 14
Building your own Install Profile
• ProfileName.info
Defines the dependencies (other modules)
• ProfileName.profile
Can add steps to the installer, or just have an empty
ProfileName_install() hook function
• ProfileName.make
Defines the specific versions and patches for modules
Friday, August 1, 14
ProfileName.info file
• Same as Module.info files
• Determines what modules are
enabled when profile installed
• Can contain:
base[] = BaseProfileName
to build on another profile
when using this patch:
http://drupal.org/files/1356276-make-D7-21.patch
name = Profile Name
description = Description of what the profile does.
core = 7.x
dependencies[] = block
dependencies[] = color
dependencies[] = comment
dependencies[] = contextual
dependencies[] = dashboard
dependencies[] = help
dependencies[] = image
dependencies[] = list
dependencies[] = menu
dependencies[] = number
dependencies[] = options
dependencies[] = path
dependencies[] = taxonomy
dependencies[] = dblog
dependencies[] = search
dependencies[] = shortcut
dependencies[] = toolbar
dependencies[] = overlay
dependencies[] = field_ui
dependencies[] = file
dependencies[] = rdf
Friday, August 1, 14
ProfileName.profile File
• Can add steps to installer
• Return empty array for default
<?php
/**
 * Implements hook_install_tasks().
 */
function PROFILENAME_tasks($install_state) {
  $tasks = array();
  return $tasks;
}
?>
Friday, August 1, 14
Profile Make files
• Controls what modules are downloaded when built
• Three make files:
drupal-org-core.make (contains Drupal Core)
drupal-org.make (contains everything else)
build-profile.make (references the other two)
• Allows you to build a Distribution from your Profile
using “drush make”
Friday, August 1, 14
drupal-org-core.make
• Determines what version of Drupal Core
• Contains any needed patches to core
Friday, August 1, 14
drupal-org.make
• Reference exact versions.
• Apply specific patches
• Modules install into
/profiles/profilename/modules
• Can specify exact git revision
Friday, August 1, 14
build-profile.make
• Just references
the other two make files.
Friday, August 1, 14
Building using Drush Make
• Pull your latest profile into temp directory
• Run drush:
drush make
--prepare-install
--contrib-destination=profiles/ProfileName
ProfileLocation/build-profile.make
DestinationDir
• Example:
git clone git@myProfileRepository.git
drush make --prepare-install --contrib-destination=profiles/myprofile
myProfileRepository/build-myprofile.make /var/www/mysite
• Will download modules, patch, etc
(ProfileLocation)
Friday, August 1, 14
Merge the distribution
• Use rsync to merge your profile
distribution with what
“drush make” installed
rsync -r
ProfileLocation/
DestinationDir/profiles/profileName/
• Then just go to
http://mysite/install.php to install
Profile
Drush Make
Full Drupal Site
Friday, August 1, 14
Automated Building
• You only need to run install.php ONCE to set up your initial site
• For future changes (e.g. via Jenkins),
• This will delete DestDir (drupal root) and recreate your entire site!
cd ProfileLocation
git checkout develop
git pull origin develop
mv DestDir/sites /tmp/sites
drush make --contrib-destination=profiles/myprofile build-profile.make DestDir
rsync -r ProfileLocation/ DestDir/profiles/myprofile
mv /tmp/sites DestDir/sites
cd DestDir
drush updb
drush fra -y
drush cc all
Friday, August 1, 14
“Fake” profiles
• Install Drupal normally
• Use “drush make” to create files in profiles/profileName
• Tell Drupal you installed with a profile:
drush vset install_profile profileName
• Now Drupal will look in profiles/profileName for modules
• Don’t need profileName.profile or profileName.install files
• profileName.info can be a “stub” file
(ADVANCED)
Friday, August 1, 14
Why use Profiles? (revisited)
• Easily separate common code from site-specific code
• Documents exact module dependencies and patches
(via drush make files)
• Easier to control module updates
• Can build upon other profiles (*)
Friday, August 1, 14
Development Tools
Friday, August 1, 14
Making DEV like PROD
• Development environment often doesn’t match
configuration of Production environment:
• PROD has caching (Varnish, etc)
• OS Differences (PROD on Linux, DEV on Mac)
• Version consistency of Apache, PHP, MySQL, etc
• Configuration consistency
Friday, August 1, 14
Virtual Machines (VM)
• VirtualBox (free), VMware, etc
• Allows you to run a completely separate machine within your
own computer
• Can create a separate VM for each client project
• Works on PC, Mac, Linux
• Can take a while to configure
• Can use a lot of resources (memory, disk)
Friday, August 1, 14
Vagrant
• Vagrant is like a MAKE file for VMs
• Vagrant configuration sets RAM, CPU, etc
• Allows you to spin up a VM locally that matches PROD
(can also spin up on Amazon, Rackspace, etc)
• Acts as a command-line wrapper around
VirtualBox/VMWare
Friday, August 1, 14
Puppet (or Chef)
• Puppet is like a MAKE file for the Software configuration.
• Controls version and configuration of Apache, nginx, PHP, drush,
MySQL, etc.
• Can be used to configure both DEV and PROD
(doesn’t require a VM)
• Helps document exact server configurations
• See https://puphpet.com/ for interactive puppet script creator.
Friday, August 1, 14
IDE (Integrated Development Environment)
• Code styling (Drupal coding standard)
• Code analysis (unused variables, missing returns, etc)
• Integrated Debugging (breakpoints, step, variable inspect)
• Integration with version control (git)
• Integration with other tools (Vagrant, ssh, gitflow)
• Drupal integration
• (I personally use PHPStorm)
Friday, August 1, 14
Summary
• Define your environments
• Create a deployment process (and stick with it)
• Match DEV and PROD as much as possible
• Keep hands off PROD! (everything in code)
• Automate all the things
• Use all the tools
Friday, August 1, 14
Questions?
Friday, August 1, 14
PHASE2TECHNOLOGY.COM
Friday, August 1, 14

Mais conteúdo relacionado

Mais procurados

Using Grunt with Drupal
Using Grunt with DrupalUsing Grunt with Drupal
Using Grunt with Drupalarithmetric
 
Staging Drupal 8 31 09 1 3
Staging Drupal 8 31 09 1 3Staging Drupal 8 31 09 1 3
Staging Drupal 8 31 09 1 3Drupalcon Paris
 
Manage your Windows Infrastructure with Puppet Bolt - August 26 - 2020
Manage your Windows Infrastructure with Puppet Bolt - August 26 - 2020Manage your Windows Infrastructure with Puppet Bolt - August 26 - 2020
Manage your Windows Infrastructure with Puppet Bolt - August 26 - 2020Puppet
 
Drush und Multisite: drush_multi
Drush und Multisite: drush_multiDrush und Multisite: drush_multi
Drush und Multisite: drush_multiFlorian Latzel
 
drush_multi @ DrupalDevDays 2010
drush_multi @ DrupalDevDays 2010drush_multi @ DrupalDevDays 2010
drush_multi @ DrupalDevDays 2010Florian Latzel
 
Easily Manage Patching and Application Updates with Chocolatey + Puppet - Apr...
Easily Manage Patching and Application Updates with Chocolatey + Puppet - Apr...Easily Manage Patching and Application Updates with Chocolatey + Puppet - Apr...
Easily Manage Patching and Application Updates with Chocolatey + Puppet - Apr...Puppet
 
Taking your module from Drupal 6 to Drupal 7
Taking your module from Drupal 6 to Drupal 7Taking your module from Drupal 6 to Drupal 7
Taking your module from Drupal 6 to Drupal 7Phase2
 
How a Content Delivery Network Can Help Speed Up Your Website
How a Content Delivery Network Can Help Speed Up Your WebsiteHow a Content Delivery Network Can Help Speed Up Your Website
How a Content Delivery Network Can Help Speed Up Your WebsiteMediacurrent
 
Convert modules from 6.x to 7.x
Convert modules from 6.x to 7.xConvert modules from 6.x to 7.x
Convert modules from 6.x to 7.xJoão Ventura
 
Devel for Drupal 8
Devel for Drupal 8Devel for Drupal 8
Devel for Drupal 8Luca Lusso
 
Drupal Developer Days Keynote
Drupal Developer Days KeynoteDrupal Developer Days Keynote
Drupal Developer Days KeynoteAngela Byron
 
Virtual CD4PE Workshop
Virtual CD4PE WorkshopVirtual CD4PE Workshop
Virtual CD4PE WorkshopPuppet
 
Configuration as Dependency: Managing Drupal 8 Configuration with git and Com...
Configuration as Dependency: Managing Drupal 8 Configuration with git and Com...Configuration as Dependency: Managing Drupal 8 Configuration with git and Com...
Configuration as Dependency: Managing Drupal 8 Configuration with git and Com...Erich Beyrent
 
Virtual Bolt Workshop - March 16, 2020
Virtual Bolt Workshop - March 16, 2020Virtual Bolt Workshop - March 16, 2020
Virtual Bolt Workshop - March 16, 2020Puppet
 
Automating Drupal Development: Makefiles, features and beyond
Automating Drupal Development: Makefiles, features and beyondAutomating Drupal Development: Makefiles, features and beyond
Automating Drupal Development: Makefiles, features and beyondNuvole
 
Advanced Configuration Management with Config Split et al.
Advanced Configuration Management with Config Split et al.Advanced Configuration Management with Config Split et al.
Advanced Configuration Management with Config Split et al.Nuvole
 
Hands On with Maven
Hands On with MavenHands On with Maven
Hands On with MavenSid Anand
 

Mais procurados (20)

Using Grunt with Drupal
Using Grunt with DrupalUsing Grunt with Drupal
Using Grunt with Drupal
 
Staging Drupal 8 31 09 1 3
Staging Drupal 8 31 09 1 3Staging Drupal 8 31 09 1 3
Staging Drupal 8 31 09 1 3
 
Manage your Windows Infrastructure with Puppet Bolt - August 26 - 2020
Manage your Windows Infrastructure with Puppet Bolt - August 26 - 2020Manage your Windows Infrastructure with Puppet Bolt - August 26 - 2020
Manage your Windows Infrastructure with Puppet Bolt - August 26 - 2020
 
Drush und Multisite: drush_multi
Drush und Multisite: drush_multiDrush und Multisite: drush_multi
Drush und Multisite: drush_multi
 
drush_multi @ DrupalDevDays 2010
drush_multi @ DrupalDevDays 2010drush_multi @ DrupalDevDays 2010
drush_multi @ DrupalDevDays 2010
 
Easily Manage Patching and Application Updates with Chocolatey + Puppet - Apr...
Easily Manage Patching and Application Updates with Chocolatey + Puppet - Apr...Easily Manage Patching and Application Updates with Chocolatey + Puppet - Apr...
Easily Manage Patching and Application Updates with Chocolatey + Puppet - Apr...
 
Taking your module from Drupal 6 to Drupal 7
Taking your module from Drupal 6 to Drupal 7Taking your module from Drupal 6 to Drupal 7
Taking your module from Drupal 6 to Drupal 7
 
How a Content Delivery Network Can Help Speed Up Your Website
How a Content Delivery Network Can Help Speed Up Your WebsiteHow a Content Delivery Network Can Help Speed Up Your Website
How a Content Delivery Network Can Help Speed Up Your Website
 
Migrate to Drupal 8
Migrate to Drupal 8Migrate to Drupal 8
Migrate to Drupal 8
 
Convert modules from 6.x to 7.x
Convert modules from 6.x to 7.xConvert modules from 6.x to 7.x
Convert modules from 6.x to 7.x
 
Devel for Drupal 8
Devel for Drupal 8Devel for Drupal 8
Devel for Drupal 8
 
features+
features+features+
features+
 
Drupal Developer Days Keynote
Drupal Developer Days KeynoteDrupal Developer Days Keynote
Drupal Developer Days Keynote
 
Virtual CD4PE Workshop
Virtual CD4PE WorkshopVirtual CD4PE Workshop
Virtual CD4PE Workshop
 
Configuration as Dependency: Managing Drupal 8 Configuration with git and Com...
Configuration as Dependency: Managing Drupal 8 Configuration with git and Com...Configuration as Dependency: Managing Drupal 8 Configuration with git and Com...
Configuration as Dependency: Managing Drupal 8 Configuration with git and Com...
 
Virtual Bolt Workshop - March 16, 2020
Virtual Bolt Workshop - March 16, 2020Virtual Bolt Workshop - March 16, 2020
Virtual Bolt Workshop - March 16, 2020
 
Automating Drupal Development: Makefiles, features and beyond
Automating Drupal Development: Makefiles, features and beyondAutomating Drupal Development: Makefiles, features and beyond
Automating Drupal Development: Makefiles, features and beyond
 
Advanced Configuration Management with Config Split et al.
Advanced Configuration Management with Config Split et al.Advanced Configuration Management with Config Split et al.
Advanced Configuration Management with Config Split et al.
 
Development Tools - Maven
Development Tools - MavenDevelopment Tools - Maven
Development Tools - Maven
 
Hands On with Maven
Hands On with MavenHands On with Maven
Hands On with Maven
 

Destaque

5 Essentials for Simplifiied Release Management and Continuous Delivery
5 Essentials for Simplifiied Release Management and Continuous Delivery5 Essentials for Simplifiied Release Management and Continuous Delivery
5 Essentials for Simplifiied Release Management and Continuous DeliverySalesforce Developers
 
Dev, Staging & Production Workflow with Gitify (at MODXpo 2015 in Munich)
Dev, Staging & Production Workflow with Gitify (at MODXpo 2015 in Munich)Dev, Staging & Production Workflow with Gitify (at MODXpo 2015 in Munich)
Dev, Staging & Production Workflow with Gitify (at MODXpo 2015 in Munich)Mark Hamstra
 
How to build a proper software staging environment for testing
How to build a proper software staging environment for testing How to build a proper software staging environment for testing
How to build a proper software staging environment for testing TestCampRO
 
Multi-QA Environment, parallel development with Git
Multi-QA Environment, parallel development with GitMulti-QA Environment, parallel development with Git
Multi-QA Environment, parallel development with Gitdopejam
 
ITIL Service Transition
ITIL Service TransitionITIL Service Transition
ITIL Service TransitionMarvin Sirait
 
Managing Your Application Lifecycle on AWS: Continuous Integration and Deploy...
Managing Your Application Lifecycle on AWS: Continuous Integration and Deploy...Managing Your Application Lifecycle on AWS: Continuous Integration and Deploy...
Managing Your Application Lifecycle on AWS: Continuous Integration and Deploy...Amazon Web Services
 
Choosing the Right Cloud Based QA Environment for your Business Needs
Choosing the Right Cloud Based QA Environment for your Business NeedsChoosing the Right Cloud Based QA Environment for your Business Needs
Choosing the Right Cloud Based QA Environment for your Business NeedsInfosys
 
ITIL Service Management
ITIL Service ManagementITIL Service Management
ITIL Service ManagementMarvin Sirait
 
Continuous Integration for Mobile App Testing
Continuous Integration for Mobile App TestingContinuous Integration for Mobile App Testing
Continuous Integration for Mobile App TestingInfostretch
 
Drupal Continuous Integration with Jenkins - The Basics
Drupal Continuous Integration with Jenkins - The BasicsDrupal Continuous Integration with Jenkins - The Basics
Drupal Continuous Integration with Jenkins - The BasicsJohn Smith
 
Git branch stregagy & case study
Git branch stregagy & case studyGit branch stregagy & case study
Git branch stregagy & case studyWoo Jin Kim
 
Practical management of development & QA environments for SharePoint 2013
Practical management of development & QA environments for SharePoint 2013Practical management of development & QA environments for SharePoint 2013
Practical management of development & QA environments for SharePoint 2013SharePointRadi
 
Digital transformation continues to drive IT strategy, How is QA and testing ...
Digital transformation continues to drive IT strategy, How is QA and testing ...Digital transformation continues to drive IT strategy, How is QA and testing ...
Digital transformation continues to drive IT strategy, How is QA and testing ...QA or the Highway
 
From development environments to production deployments with Docker, Compose,...
From development environments to production deployments with Docker, Compose,...From development environments to production deployments with Docker, Compose,...
From development environments to production deployments with Docker, Compose,...Jérôme Petazzoni
 
Best Practices for Getting Started with AWS
Best Practices for Getting Started with AWSBest Practices for Getting Started with AWS
Best Practices for Getting Started with AWSAmazon Web Services
 
Effective Software Release Management
Effective Software Release ManagementEffective Software Release Management
Effective Software Release ManagementMichael Degnan
 
Version Control Systems -- Git -- Part I
Version Control Systems -- Git -- Part IVersion Control Systems -- Git -- Part I
Version Control Systems -- Git -- Part ISergey Aganezov
 

Destaque (20)

5 Essentials for Simplifiied Release Management and Continuous Delivery
5 Essentials for Simplifiied Release Management and Continuous Delivery5 Essentials for Simplifiied Release Management and Continuous Delivery
5 Essentials for Simplifiied Release Management and Continuous Delivery
 
Dev, Staging & Production Workflow with Gitify (at MODXpo 2015 in Munich)
Dev, Staging & Production Workflow with Gitify (at MODXpo 2015 in Munich)Dev, Staging & Production Workflow with Gitify (at MODXpo 2015 in Munich)
Dev, Staging & Production Workflow with Gitify (at MODXpo 2015 in Munich)
 
How to build a proper software staging environment for testing
How to build a proper software staging environment for testing How to build a proper software staging environment for testing
How to build a proper software staging environment for testing
 
Multi-QA Environment, parallel development with Git
Multi-QA Environment, parallel development with GitMulti-QA Environment, parallel development with Git
Multi-QA Environment, parallel development with Git
 
ITIL Service Transition
ITIL Service TransitionITIL Service Transition
ITIL Service Transition
 
Managing Your Application Lifecycle on AWS: Continuous Integration and Deploy...
Managing Your Application Lifecycle on AWS: Continuous Integration and Deploy...Managing Your Application Lifecycle on AWS: Continuous Integration and Deploy...
Managing Your Application Lifecycle on AWS: Continuous Integration and Deploy...
 
Choosing the Right Cloud Based QA Environment for your Business Needs
Choosing the Right Cloud Based QA Environment for your Business NeedsChoosing the Right Cloud Based QA Environment for your Business Needs
Choosing the Right Cloud Based QA Environment for your Business Needs
 
ITIL Service Management
ITIL Service ManagementITIL Service Management
ITIL Service Management
 
Continuous Integration for Mobile App Testing
Continuous Integration for Mobile App TestingContinuous Integration for Mobile App Testing
Continuous Integration for Mobile App Testing
 
Drupal Continuous Integration with Jenkins - The Basics
Drupal Continuous Integration with Jenkins - The BasicsDrupal Continuous Integration with Jenkins - The Basics
Drupal Continuous Integration with Jenkins - The Basics
 
Git branch stregagy & case study
Git branch stregagy & case studyGit branch stregagy & case study
Git branch stregagy & case study
 
Practical management of development & QA environments for SharePoint 2013
Practical management of development & QA environments for SharePoint 2013Practical management of development & QA environments for SharePoint 2013
Practical management of development & QA environments for SharePoint 2013
 
Digital transformation continues to drive IT strategy, How is QA and testing ...
Digital transformation continues to drive IT strategy, How is QA and testing ...Digital transformation continues to drive IT strategy, How is QA and testing ...
Digital transformation continues to drive IT strategy, How is QA and testing ...
 
5 service transition
5 service transition5 service transition
5 service transition
 
Continuous delivery-with-maven
Continuous delivery-with-mavenContinuous delivery-with-maven
Continuous delivery-with-maven
 
From development environments to production deployments with Docker, Compose,...
From development environments to production deployments with Docker, Compose,...From development environments to production deployments with Docker, Compose,...
From development environments to production deployments with Docker, Compose,...
 
Best Practices for Getting Started with AWS
Best Practices for Getting Started with AWSBest Practices for Getting Started with AWS
Best Practices for Getting Started with AWS
 
QA in Agile
QA in AgileQA in Agile
QA in Agile
 
Effective Software Release Management
Effective Software Release ManagementEffective Software Release Management
Effective Software Release Management
 
Version Control Systems -- Git -- Part I
Version Control Systems -- Git -- Part IVersion Control Systems -- Git -- Part I
Version Control Systems -- Git -- Part I
 

Semelhante a Best Practices for Development Deployment & Distributions: Capital Camp + GovDays

APEX Application Lifecycle and Deployment 20220714.pdf
APEX Application Lifecycle and Deployment 20220714.pdfAPEX Application Lifecycle and Deployment 20220714.pdf
APEX Application Lifecycle and Deployment 20220714.pdfRichard Martens
 
Build Automation of PHP Applications
Build Automation of PHP ApplicationsBuild Automation of PHP Applications
Build Automation of PHP ApplicationsPavan Kumar N
 
Building a Drupal Distribution using Features, Drush Make, Installation Profi...
Building a Drupal Distribution using Features, Drush Make, Installation Profi...Building a Drupal Distribution using Features, Drush Make, Installation Profi...
Building a Drupal Distribution using Features, Drush Make, Installation Profi...Ben Shell
 
Drupal Now! - Introduction to Drupal
Drupal Now! - Introduction to DrupalDrupal Now! - Introduction to Drupal
Drupal Now! - Introduction to DrupalAlozie Nwosu
 
Phase2 Large Drupal Multisites (gta case study)
Phase2   Large Drupal Multisites (gta case study)Phase2   Large Drupal Multisites (gta case study)
Phase2 Large Drupal Multisites (gta case study)Phase2
 
Package management and creation in Gentoo Linux
Package management and creation in Gentoo LinuxPackage management and creation in Gentoo Linux
Package management and creation in Gentoo LinuxDonnie Berkholz
 
Off the Treadmill: Building a Drupal Platform for Your Organization
Off the Treadmill: Building a Drupal Platform for Your OrganizationOff the Treadmill: Building a Drupal Platform for Your Organization
Off the Treadmill: Building a Drupal Platform for Your OrganizationRick Vugteveen
 
Apex world 2018 continuously delivering APEX
Apex world 2018 continuously delivering APEXApex world 2018 continuously delivering APEX
Apex world 2018 continuously delivering APEXSergei Martens
 
Drupal distributions - how to build them
Drupal distributions - how to build themDrupal distributions - how to build them
Drupal distributions - how to build themDick Olsson
 
Deployer - Deployment tool for PHP
Deployer - Deployment tool for PHPDeployer - Deployment tool for PHP
Deployer - Deployment tool for PHPhernanibf
 
Immutable Image-Based Operating Systems - EW2024.pdf
Immutable Image-Based Operating Systems - EW2024.pdfImmutable Image-Based Operating Systems - EW2024.pdf
Immutable Image-Based Operating Systems - EW2024.pdfDrew Moseley
 
Nagios Conference 2014 - Mike Merideth - The Art and Zen of Managing Nagios w...
Nagios Conference 2014 - Mike Merideth - The Art and Zen of Managing Nagios w...Nagios Conference 2014 - Mike Merideth - The Art and Zen of Managing Nagios w...
Nagios Conference 2014 - Mike Merideth - The Art and Zen of Managing Nagios w...Nagios
 
Lupus Decoupled Drupal - Drupal Austria Meetup - 2023-04.pdf
Lupus Decoupled Drupal - Drupal Austria Meetup - 2023-04.pdfLupus Decoupled Drupal - Drupal Austria Meetup - 2023-04.pdf
Lupus Decoupled Drupal - Drupal Austria Meetup - 2023-04.pdfWolfgangZiegler6
 
Intro to Drupal Module Developement
Intro to Drupal Module DevelopementIntro to Drupal Module Developement
Intro to Drupal Module DevelopementMatt Mendonca
 
Spring Roo Add-On Development & Distribution
Spring Roo Add-On Development & DistributionSpring Roo Add-On Development & Distribution
Spring Roo Add-On Development & DistributionStefan Schmidt
 
Composer JSON kills make files
Composer JSON kills make filesComposer JSON kills make files
Composer JSON kills make filesropsu
 
OA2 for Goverment
OA2 for GovermentOA2 for Goverment
OA2 for GovermentPhase2
 

Semelhante a Best Practices for Development Deployment & Distributions: Capital Camp + GovDays (20)

APEX Application Lifecycle and Deployment 20220714.pdf
APEX Application Lifecycle and Deployment 20220714.pdfAPEX Application Lifecycle and Deployment 20220714.pdf
APEX Application Lifecycle and Deployment 20220714.pdf
 
Build Automation of PHP Applications
Build Automation of PHP ApplicationsBuild Automation of PHP Applications
Build Automation of PHP Applications
 
Building a Drupal Distribution using Features, Drush Make, Installation Profi...
Building a Drupal Distribution using Features, Drush Make, Installation Profi...Building a Drupal Distribution using Features, Drush Make, Installation Profi...
Building a Drupal Distribution using Features, Drush Make, Installation Profi...
 
Deployer
DeployerDeployer
Deployer
 
Drupal Now! - Introduction to Drupal
Drupal Now! - Introduction to DrupalDrupal Now! - Introduction to Drupal
Drupal Now! - Introduction to Drupal
 
Phase2 Large Drupal Multisites (gta case study)
Phase2   Large Drupal Multisites (gta case study)Phase2   Large Drupal Multisites (gta case study)
Phase2 Large Drupal Multisites (gta case study)
 
Package management and creation in Gentoo Linux
Package management and creation in Gentoo LinuxPackage management and creation in Gentoo Linux
Package management and creation in Gentoo Linux
 
Deep Dive into the AOSP
Deep Dive into the AOSPDeep Dive into the AOSP
Deep Dive into the AOSP
 
Off the Treadmill: Building a Drupal Platform for Your Organization
Off the Treadmill: Building a Drupal Platform for Your OrganizationOff the Treadmill: Building a Drupal Platform for Your Organization
Off the Treadmill: Building a Drupal Platform for Your Organization
 
Apache ant
Apache antApache ant
Apache ant
 
Apex world 2018 continuously delivering APEX
Apex world 2018 continuously delivering APEXApex world 2018 continuously delivering APEX
Apex world 2018 continuously delivering APEX
 
Drupal distributions - how to build them
Drupal distributions - how to build themDrupal distributions - how to build them
Drupal distributions - how to build them
 
Deployer - Deployment tool for PHP
Deployer - Deployment tool for PHPDeployer - Deployment tool for PHP
Deployer - Deployment tool for PHP
 
Immutable Image-Based Operating Systems - EW2024.pdf
Immutable Image-Based Operating Systems - EW2024.pdfImmutable Image-Based Operating Systems - EW2024.pdf
Immutable Image-Based Operating Systems - EW2024.pdf
 
Nagios Conference 2014 - Mike Merideth - The Art and Zen of Managing Nagios w...
Nagios Conference 2014 - Mike Merideth - The Art and Zen of Managing Nagios w...Nagios Conference 2014 - Mike Merideth - The Art and Zen of Managing Nagios w...
Nagios Conference 2014 - Mike Merideth - The Art and Zen of Managing Nagios w...
 
Lupus Decoupled Drupal - Drupal Austria Meetup - 2023-04.pdf
Lupus Decoupled Drupal - Drupal Austria Meetup - 2023-04.pdfLupus Decoupled Drupal - Drupal Austria Meetup - 2023-04.pdf
Lupus Decoupled Drupal - Drupal Austria Meetup - 2023-04.pdf
 
Intro to Drupal Module Developement
Intro to Drupal Module DevelopementIntro to Drupal Module Developement
Intro to Drupal Module Developement
 
Spring Roo Add-On Development & Distribution
Spring Roo Add-On Development & DistributionSpring Roo Add-On Development & Distribution
Spring Roo Add-On Development & Distribution
 
Composer JSON kills make files
Composer JSON kills make filesComposer JSON kills make files
Composer JSON kills make files
 
OA2 for Goverment
OA2 for GovermentOA2 for Goverment
OA2 for Goverment
 

Mais de Phase2

Phase2 Health and Wellness Brochure
Phase2 Health and Wellness BrochurePhase2 Health and Wellness Brochure
Phase2 Health and Wellness BrochurePhase2
 
A Modern Digital Experience Platform
A Modern Digital Experience PlatformA Modern Digital Experience Platform
A Modern Digital Experience PlatformPhase2
 
Beyond websites: A Modern Digital Experience Platform
Beyond websites: A Modern Digital Experience PlatformBeyond websites: A Modern Digital Experience Platform
Beyond websites: A Modern Digital Experience PlatformPhase2
 
Omnichannel For Government
Omnichannel For Government Omnichannel For Government
Omnichannel For Government Phase2
 
Bad camp2016 Release Management On Live Websites
Bad camp2016 Release Management On Live WebsitesBad camp2016 Release Management On Live Websites
Bad camp2016 Release Management On Live WebsitesPhase2
 
A FUTURE-FOCUSED DIGITAL PLATFORM WITH DRUPAL 8
A FUTURE-FOCUSED DIGITAL PLATFORM WITH DRUPAL 8A FUTURE-FOCUSED DIGITAL PLATFORM WITH DRUPAL 8
A FUTURE-FOCUSED DIGITAL PLATFORM WITH DRUPAL 8Phase2
 
The Future of Digital Storytelling - Phase2 Talk
The Future of Digital Storytelling - Phase2 TalkThe Future of Digital Storytelling - Phase2 Talk
The Future of Digital Storytelling - Phase2 TalkPhase2
 
Site building with end user in mind
Site building with end user in mindSite building with end user in mind
Site building with end user in mindPhase2
 
Fields, entities, lists, oh my!
Fields, entities, lists, oh my!Fields, entities, lists, oh my!
Fields, entities, lists, oh my!Phase2
 
Performance Profiling Tools and Tricks
Performance Profiling Tools and TricksPerformance Profiling Tools and Tricks
Performance Profiling Tools and TricksPhase2
 
NORTH CAROLINA Open Source, OpenPublic, OpenShift
NORTH CAROLINA Open Source, OpenPublic, OpenShiftNORTH CAROLINA Open Source, OpenPublic, OpenShift
NORTH CAROLINA Open Source, OpenPublic, OpenShiftPhase2
 
Drupal 8 for Enterprise: D8 in a Changing Digital Landscape
Drupal 8 for Enterprise: D8 in a Changing Digital LandscapeDrupal 8 for Enterprise: D8 in a Changing Digital Landscape
Drupal 8 for Enterprise: D8 in a Changing Digital LandscapePhase2
 
Riding the Drupal Wave: The Future for Drupal and Open Source Content Manage...
Riding the Drupal Wave:  The Future for Drupal and Open Source Content Manage...Riding the Drupal Wave:  The Future for Drupal and Open Source Content Manage...
Riding the Drupal Wave: The Future for Drupal and Open Source Content Manage...Phase2
 
Site Building with the End User in Mind
Site Building with the End User in MindSite Building with the End User in Mind
Site Building with the End User in MindPhase2
 
The Yes, No, and Maybe of "Can We Build That With Drupal?"
The Yes, No, and Maybe of "Can We Build That With Drupal?"The Yes, No, and Maybe of "Can We Build That With Drupal?"
The Yes, No, and Maybe of "Can We Build That With Drupal?"Phase2
 
User Testing For Humanitarian ID App
User Testing For Humanitarian ID AppUser Testing For Humanitarian ID App
User Testing For Humanitarian ID AppPhase2
 
Redhat.com: An Architectural Case Study
Redhat.com: An Architectural Case StudyRedhat.com: An Architectural Case Study
Redhat.com: An Architectural Case StudyPhase2
 
The New Design Workflow
The New Design WorkflowThe New Design Workflow
The New Design WorkflowPhase2
 
Drupal 8, Don’t Be Late (Enterprise Orgs, We’re Looking at You)
Drupal 8, Don’t Be Late (Enterprise Orgs, We’re Looking at You)Drupal 8, Don’t Be Late (Enterprise Orgs, We’re Looking at You)
Drupal 8, Don’t Be Late (Enterprise Orgs, We’re Looking at You)Phase2
 
Memorial Sloan Kettering: Adventures in Drupal 8
Memorial Sloan Kettering: Adventures in Drupal 8Memorial Sloan Kettering: Adventures in Drupal 8
Memorial Sloan Kettering: Adventures in Drupal 8Phase2
 

Mais de Phase2 (20)

Phase2 Health and Wellness Brochure
Phase2 Health and Wellness BrochurePhase2 Health and Wellness Brochure
Phase2 Health and Wellness Brochure
 
A Modern Digital Experience Platform
A Modern Digital Experience PlatformA Modern Digital Experience Platform
A Modern Digital Experience Platform
 
Beyond websites: A Modern Digital Experience Platform
Beyond websites: A Modern Digital Experience PlatformBeyond websites: A Modern Digital Experience Platform
Beyond websites: A Modern Digital Experience Platform
 
Omnichannel For Government
Omnichannel For Government Omnichannel For Government
Omnichannel For Government
 
Bad camp2016 Release Management On Live Websites
Bad camp2016 Release Management On Live WebsitesBad camp2016 Release Management On Live Websites
Bad camp2016 Release Management On Live Websites
 
A FUTURE-FOCUSED DIGITAL PLATFORM WITH DRUPAL 8
A FUTURE-FOCUSED DIGITAL PLATFORM WITH DRUPAL 8A FUTURE-FOCUSED DIGITAL PLATFORM WITH DRUPAL 8
A FUTURE-FOCUSED DIGITAL PLATFORM WITH DRUPAL 8
 
The Future of Digital Storytelling - Phase2 Talk
The Future of Digital Storytelling - Phase2 TalkThe Future of Digital Storytelling - Phase2 Talk
The Future of Digital Storytelling - Phase2 Talk
 
Site building with end user in mind
Site building with end user in mindSite building with end user in mind
Site building with end user in mind
 
Fields, entities, lists, oh my!
Fields, entities, lists, oh my!Fields, entities, lists, oh my!
Fields, entities, lists, oh my!
 
Performance Profiling Tools and Tricks
Performance Profiling Tools and TricksPerformance Profiling Tools and Tricks
Performance Profiling Tools and Tricks
 
NORTH CAROLINA Open Source, OpenPublic, OpenShift
NORTH CAROLINA Open Source, OpenPublic, OpenShiftNORTH CAROLINA Open Source, OpenPublic, OpenShift
NORTH CAROLINA Open Source, OpenPublic, OpenShift
 
Drupal 8 for Enterprise: D8 in a Changing Digital Landscape
Drupal 8 for Enterprise: D8 in a Changing Digital LandscapeDrupal 8 for Enterprise: D8 in a Changing Digital Landscape
Drupal 8 for Enterprise: D8 in a Changing Digital Landscape
 
Riding the Drupal Wave: The Future for Drupal and Open Source Content Manage...
Riding the Drupal Wave:  The Future for Drupal and Open Source Content Manage...Riding the Drupal Wave:  The Future for Drupal and Open Source Content Manage...
Riding the Drupal Wave: The Future for Drupal and Open Source Content Manage...
 
Site Building with the End User in Mind
Site Building with the End User in MindSite Building with the End User in Mind
Site Building with the End User in Mind
 
The Yes, No, and Maybe of "Can We Build That With Drupal?"
The Yes, No, and Maybe of "Can We Build That With Drupal?"The Yes, No, and Maybe of "Can We Build That With Drupal?"
The Yes, No, and Maybe of "Can We Build That With Drupal?"
 
User Testing For Humanitarian ID App
User Testing For Humanitarian ID AppUser Testing For Humanitarian ID App
User Testing For Humanitarian ID App
 
Redhat.com: An Architectural Case Study
Redhat.com: An Architectural Case StudyRedhat.com: An Architectural Case Study
Redhat.com: An Architectural Case Study
 
The New Design Workflow
The New Design WorkflowThe New Design Workflow
The New Design Workflow
 
Drupal 8, Don’t Be Late (Enterprise Orgs, We’re Looking at You)
Drupal 8, Don’t Be Late (Enterprise Orgs, We’re Looking at You)Drupal 8, Don’t Be Late (Enterprise Orgs, We’re Looking at You)
Drupal 8, Don’t Be Late (Enterprise Orgs, We’re Looking at You)
 
Memorial Sloan Kettering: Adventures in Drupal 8
Memorial Sloan Kettering: Adventures in Drupal 8Memorial Sloan Kettering: Adventures in Drupal 8
Memorial Sloan Kettering: Adventures in Drupal 8
 

Último

Unleashing Real-time Insights with ClickHouse_ Navigating the Landscape in 20...
Unleashing Real-time Insights with ClickHouse_ Navigating the Landscape in 20...Unleashing Real-time Insights with ClickHouse_ Navigating the Landscape in 20...
Unleashing Real-time Insights with ClickHouse_ Navigating the Landscape in 20...Alkin Tezuysal
 
The Role of FIDO in a Cyber Secure Netherlands: FIDO Paris Seminar.pptx
The Role of FIDO in a Cyber Secure Netherlands: FIDO Paris Seminar.pptxThe Role of FIDO in a Cyber Secure Netherlands: FIDO Paris Seminar.pptx
The Role of FIDO in a Cyber Secure Netherlands: FIDO Paris Seminar.pptxLoriGlavin3
 
Time Series Foundation Models - current state and future directions
Time Series Foundation Models - current state and future directionsTime Series Foundation Models - current state and future directions
Time Series Foundation Models - current state and future directionsNathaniel Shimoni
 
DevEX - reference for building teams, processes, and platforms
DevEX - reference for building teams, processes, and platformsDevEX - reference for building teams, processes, and platforms
DevEX - reference for building teams, processes, and platformsSergiu Bodiu
 
Arizona Broadband Policy Past, Present, and Future Presentation 3/25/24
Arizona Broadband Policy Past, Present, and Future Presentation 3/25/24Arizona Broadband Policy Past, Present, and Future Presentation 3/25/24
Arizona Broadband Policy Past, Present, and Future Presentation 3/25/24Mark Goldstein
 
Emixa Mendix Meetup 11 April 2024 about Mendix Native development
Emixa Mendix Meetup 11 April 2024 about Mendix Native developmentEmixa Mendix Meetup 11 April 2024 about Mendix Native development
Emixa Mendix Meetup 11 April 2024 about Mendix Native developmentPim van der Noll
 
A Framework for Development in the AI Age
A Framework for Development in the AI AgeA Framework for Development in the AI Age
A Framework for Development in the AI AgeCprime
 
From Family Reminiscence to Scholarly Archive .
From Family Reminiscence to Scholarly Archive .From Family Reminiscence to Scholarly Archive .
From Family Reminiscence to Scholarly Archive .Alan Dix
 
UiPath Community: Communication Mining from Zero to Hero
UiPath Community: Communication Mining from Zero to HeroUiPath Community: Communication Mining from Zero to Hero
UiPath Community: Communication Mining from Zero to HeroUiPathCommunity
 
The Future Roadmap for the Composable Data Stack - Wes McKinney - Data Counci...
The Future Roadmap for the Composable Data Stack - Wes McKinney - Data Counci...The Future Roadmap for the Composable Data Stack - Wes McKinney - Data Counci...
The Future Roadmap for the Composable Data Stack - Wes McKinney - Data Counci...Wes McKinney
 
2024 April Patch Tuesday
2024 April Patch Tuesday2024 April Patch Tuesday
2024 April Patch TuesdayIvanti
 
Transcript: New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024Transcript: New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024BookNet Canada
 
So einfach geht modernes Roaming fuer Notes und Nomad.pdf
So einfach geht modernes Roaming fuer Notes und Nomad.pdfSo einfach geht modernes Roaming fuer Notes und Nomad.pdf
So einfach geht modernes Roaming fuer Notes und Nomad.pdfpanagenda
 
Scale your database traffic with Read & Write split using MySQL Router
Scale your database traffic with Read & Write split using MySQL RouterScale your database traffic with Read & Write split using MySQL Router
Scale your database traffic with Read & Write split using MySQL RouterMydbops
 
[Webinar] SpiraTest - Setting New Standards in Quality Assurance
[Webinar] SpiraTest - Setting New Standards in Quality Assurance[Webinar] SpiraTest - Setting New Standards in Quality Assurance
[Webinar] SpiraTest - Setting New Standards in Quality AssuranceInflectra
 
Enhancing User Experience - Exploring the Latest Features of Tallyman Axis Lo...
Enhancing User Experience - Exploring the Latest Features of Tallyman Axis Lo...Enhancing User Experience - Exploring the Latest Features of Tallyman Axis Lo...
Enhancing User Experience - Exploring the Latest Features of Tallyman Axis Lo...Scott Andery
 
TeamStation AI System Report LATAM IT Salaries 2024
TeamStation AI System Report LATAM IT Salaries 2024TeamStation AI System Report LATAM IT Salaries 2024
TeamStation AI System Report LATAM IT Salaries 2024Lonnie McRorey
 
Merck Moving Beyond Passwords: FIDO Paris Seminar.pptx
Merck Moving Beyond Passwords: FIDO Paris Seminar.pptxMerck Moving Beyond Passwords: FIDO Paris Seminar.pptx
Merck Moving Beyond Passwords: FIDO Paris Seminar.pptxLoriGlavin3
 
Genislab builds better products and faster go-to-market with Lean project man...
Genislab builds better products and faster go-to-market with Lean project man...Genislab builds better products and faster go-to-market with Lean project man...
Genislab builds better products and faster go-to-market with Lean project man...Farhan Tariq
 
A Deep Dive on Passkeys: FIDO Paris Seminar.pptx
A Deep Dive on Passkeys: FIDO Paris Seminar.pptxA Deep Dive on Passkeys: FIDO Paris Seminar.pptx
A Deep Dive on Passkeys: FIDO Paris Seminar.pptxLoriGlavin3
 

Último (20)

Unleashing Real-time Insights with ClickHouse_ Navigating the Landscape in 20...
Unleashing Real-time Insights with ClickHouse_ Navigating the Landscape in 20...Unleashing Real-time Insights with ClickHouse_ Navigating the Landscape in 20...
Unleashing Real-time Insights with ClickHouse_ Navigating the Landscape in 20...
 
The Role of FIDO in a Cyber Secure Netherlands: FIDO Paris Seminar.pptx
The Role of FIDO in a Cyber Secure Netherlands: FIDO Paris Seminar.pptxThe Role of FIDO in a Cyber Secure Netherlands: FIDO Paris Seminar.pptx
The Role of FIDO in a Cyber Secure Netherlands: FIDO Paris Seminar.pptx
 
Time Series Foundation Models - current state and future directions
Time Series Foundation Models - current state and future directionsTime Series Foundation Models - current state and future directions
Time Series Foundation Models - current state and future directions
 
DevEX - reference for building teams, processes, and platforms
DevEX - reference for building teams, processes, and platformsDevEX - reference for building teams, processes, and platforms
DevEX - reference for building teams, processes, and platforms
 
Arizona Broadband Policy Past, Present, and Future Presentation 3/25/24
Arizona Broadband Policy Past, Present, and Future Presentation 3/25/24Arizona Broadband Policy Past, Present, and Future Presentation 3/25/24
Arizona Broadband Policy Past, Present, and Future Presentation 3/25/24
 
Emixa Mendix Meetup 11 April 2024 about Mendix Native development
Emixa Mendix Meetup 11 April 2024 about Mendix Native developmentEmixa Mendix Meetup 11 April 2024 about Mendix Native development
Emixa Mendix Meetup 11 April 2024 about Mendix Native development
 
A Framework for Development in the AI Age
A Framework for Development in the AI AgeA Framework for Development in the AI Age
A Framework for Development in the AI Age
 
From Family Reminiscence to Scholarly Archive .
From Family Reminiscence to Scholarly Archive .From Family Reminiscence to Scholarly Archive .
From Family Reminiscence to Scholarly Archive .
 
UiPath Community: Communication Mining from Zero to Hero
UiPath Community: Communication Mining from Zero to HeroUiPath Community: Communication Mining from Zero to Hero
UiPath Community: Communication Mining from Zero to Hero
 
The Future Roadmap for the Composable Data Stack - Wes McKinney - Data Counci...
The Future Roadmap for the Composable Data Stack - Wes McKinney - Data Counci...The Future Roadmap for the Composable Data Stack - Wes McKinney - Data Counci...
The Future Roadmap for the Composable Data Stack - Wes McKinney - Data Counci...
 
2024 April Patch Tuesday
2024 April Patch Tuesday2024 April Patch Tuesday
2024 April Patch Tuesday
 
Transcript: New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024Transcript: New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024
Transcript: New from BookNet Canada for 2024: Loan Stars - Tech Forum 2024
 
So einfach geht modernes Roaming fuer Notes und Nomad.pdf
So einfach geht modernes Roaming fuer Notes und Nomad.pdfSo einfach geht modernes Roaming fuer Notes und Nomad.pdf
So einfach geht modernes Roaming fuer Notes und Nomad.pdf
 
Scale your database traffic with Read & Write split using MySQL Router
Scale your database traffic with Read & Write split using MySQL RouterScale your database traffic with Read & Write split using MySQL Router
Scale your database traffic with Read & Write split using MySQL Router
 
[Webinar] SpiraTest - Setting New Standards in Quality Assurance
[Webinar] SpiraTest - Setting New Standards in Quality Assurance[Webinar] SpiraTest - Setting New Standards in Quality Assurance
[Webinar] SpiraTest - Setting New Standards in Quality Assurance
 
Enhancing User Experience - Exploring the Latest Features of Tallyman Axis Lo...
Enhancing User Experience - Exploring the Latest Features of Tallyman Axis Lo...Enhancing User Experience - Exploring the Latest Features of Tallyman Axis Lo...
Enhancing User Experience - Exploring the Latest Features of Tallyman Axis Lo...
 
TeamStation AI System Report LATAM IT Salaries 2024
TeamStation AI System Report LATAM IT Salaries 2024TeamStation AI System Report LATAM IT Salaries 2024
TeamStation AI System Report LATAM IT Salaries 2024
 
Merck Moving Beyond Passwords: FIDO Paris Seminar.pptx
Merck Moving Beyond Passwords: FIDO Paris Seminar.pptxMerck Moving Beyond Passwords: FIDO Paris Seminar.pptx
Merck Moving Beyond Passwords: FIDO Paris Seminar.pptx
 
Genislab builds better products and faster go-to-market with Lean project man...
Genislab builds better products and faster go-to-market with Lean project man...Genislab builds better products and faster go-to-market with Lean project man...
Genislab builds better products and faster go-to-market with Lean project man...
 
A Deep Dive on Passkeys: FIDO Paris Seminar.pptx
A Deep Dive on Passkeys: FIDO Paris Seminar.pptxA Deep Dive on Passkeys: FIDO Paris Seminar.pptx
A Deep Dive on Passkeys: FIDO Paris Seminar.pptx
 

Best Practices for Development Deployment & Distributions: Capital Camp + GovDays

  • 1. Best Practices for Development Deployment & Distributions August 1, 2014 Friday, August 1, 14
  • 2. Best Practices... • Defining environments (Dev, Stage, Prod, etc) • Smooth and Automated deployments • Distributions and How to use them • Useful development tools Mike Potter Software Architect @ Phase2 Email: mpotter@phase2technology.com Drupal.org: mpotter Friday, August 1, 14
  • 3. Principles & Goals • Create an easy-to-understand and simple codebase • Know exactly what code is present in each environment • Isolate developers to avoid stepping on toes • Track contributed code and patches • Automate putting desired code into an environment • Automate putting desired configuration into an environment • Test upcoming release code against latest production data/config Friday, August 1, 14
  • 5. Environments - DEVelopment • One for each Individual developer (whether Local, VMs, or via VHosts) • Use git-flow branching strategy • Put Everything into Code! • Isolate Developers Development Integration Staging / QA Production Friday, August 1, 14
  • 6. Environments - INTegration • “Integrates” all DEV environments • Runs on “develop” branch • First round of testing • Automated or Manual rebuilding Development Integration Staging / QA Production Friday, August 1, 14
  • 7. Environments - QA (Staging) • Contains Production Content • Runs on “release” branches or tags • Final testing ground • Used to test hotfixes • Essentially a copy of Production for the next release Development Integration Staging / QA Production Friday, August 1, 14
  • 8. Environments - PRODuction • “Database of Record” for Content • Runs on tagged “master” branch • Should NEVER manually touch Production • Use Hotfix process on QA for emergencies Development Integration Staging / QA Production Friday, August 1, 14
  • 10. Drupal DB Images, FilesPHP Code Development Integration / Staging Production GIT Repo Code Code Images, Files Images, Files DB Content DB Content Configuration Code git commit git push git pull Features rsync @prod >> @stage rsync @stage >> @dev sql dump sql restore sql restore branch: develop branch: release git pull branch: master DB of Record Code Files Database Content • CODE is for Developers • CONTENT is for Production Friday, August 1, 14
  • 11. Git Flow • Each major feature has a branch • Current release is “master” • Next release is “develop” • http://github.com/nvie/gitflow provides easy git commands • git flow feature start <name> git flow feature publish <name> http://nvie.com/posts/a-successful-git-branching-model/ Friday, August 1, 14
  • 12. Everything in Code • Use Features module to export configuration http://drupal.org/project/features • Keep it modular! (don’t put everything into one feature) • Use Features Override module to export site-specific changes (when using a base distribution) • Use update-hooks for anything else (custom hook_update functions in code) Friday, August 1, 14
  • 13. Features Strategies • In general, more, smaller Features is better • Group by functionality, such as configuration related to a specific content type • Keep stuff that is often changed (permissions) separate from configuration that doesn’t change (fields) Friday, August 1, 14
  • 14. Good Feature gallery (content type) main_image (field) gallery_thumbnail (image style) gallery_view (view) Bad Feature gallery_view (view) content_view (view) event_view (view) news_view (view) user_view (view) Friday, August 1, 14
  • 15. Use Update Hooks • Enable/disable modules • Update database • Revert features (if not using drush fra) Friday, August 1, 14
  • 16. Automated Deployment • Use drush command line tool • Pull code (git fetch, git checkout branch/tag) • Rsync files @prod >> @stage (*) • Run updates (drush updb) • Revert all features (drush fra -y) • Clear cache (drush cc all) • (*) See also the Stage File Proxy module Friday, August 1, 14
  • 17. Tools for Continuous Integration • Open Source : Jenkins, CruiseControl • Commercial : Bamboo (Atlassian) • Create jobs to execute automated scripts • Run job automatically when code changes Friday, August 1, 14
  • 19. Distributions & Profiles • A Distribution is: A full copy of Drupal core along with additional modules, themes, and installation profiles • A Profile is: A set of installation instructions https://www.drupal.org/node/1022020 • Drupal searches in /sites before /profiles Friday, August 1, 14
  • 20. Why use Profiles? • Easily separate common code from site-specific code • Documents exact module dependencies and patches (stops you from hacking core) • Easier to control module updates • Can build upon other profiles (*) • Can be more of a “drush make” wrapper rather than something actually “installed” Friday, August 1, 14
  • 21. Module search order • Drupal searches for modules in this order: /sites/sitename/modules (for multisites) /sites/default/modules /sites/all/modules /profiles/ProfileName/modules /profiles/BaseProfileName/modules (if using a base profile) /modules • Modules from your Profile are kept separate from site-specific module overrides Friday, August 1, 14
  • 22. Building your own Install Profile • ProfileName.info Defines the dependencies (other modules) • ProfileName.profile Can add steps to the installer, or just have an empty ProfileName_install() hook function • ProfileName.make Defines the specific versions and patches for modules Friday, August 1, 14
  • 23. ProfileName.info file • Same as Module.info files • Determines what modules are enabled when profile installed • Can contain: base[] = BaseProfileName to build on another profile when using this patch: http://drupal.org/files/1356276-make-D7-21.patch name = Profile Name description = Description of what the profile does. core = 7.x dependencies[] = block dependencies[] = color dependencies[] = comment dependencies[] = contextual dependencies[] = dashboard dependencies[] = help dependencies[] = image dependencies[] = list dependencies[] = menu dependencies[] = number dependencies[] = options dependencies[] = path dependencies[] = taxonomy dependencies[] = dblog dependencies[] = search dependencies[] = shortcut dependencies[] = toolbar dependencies[] = overlay dependencies[] = field_ui dependencies[] = file dependencies[] = rdf Friday, August 1, 14
  • 24. ProfileName.profile File • Can add steps to installer • Return empty array for default <?php /**  * Implements hook_install_tasks().  */ function PROFILENAME_tasks($install_state) {   $tasks = array();   return $tasks; } ?> Friday, August 1, 14
  • 25. Profile Make files • Controls what modules are downloaded when built • Three make files: drupal-org-core.make (contains Drupal Core) drupal-org.make (contains everything else) build-profile.make (references the other two) • Allows you to build a Distribution from your Profile using “drush make” Friday, August 1, 14
  • 26. drupal-org-core.make • Determines what version of Drupal Core • Contains any needed patches to core Friday, August 1, 14
  • 27. drupal-org.make • Reference exact versions. • Apply specific patches • Modules install into /profiles/profilename/modules • Can specify exact git revision Friday, August 1, 14
  • 28. build-profile.make • Just references the other two make files. Friday, August 1, 14
  • 29. Building using Drush Make • Pull your latest profile into temp directory • Run drush: drush make --prepare-install --contrib-destination=profiles/ProfileName ProfileLocation/build-profile.make DestinationDir • Example: git clone git@myProfileRepository.git drush make --prepare-install --contrib-destination=profiles/myprofile myProfileRepository/build-myprofile.make /var/www/mysite • Will download modules, patch, etc (ProfileLocation) Friday, August 1, 14
  • 30. Merge the distribution • Use rsync to merge your profile distribution with what “drush make” installed rsync -r ProfileLocation/ DestinationDir/profiles/profileName/ • Then just go to http://mysite/install.php to install Profile Drush Make Full Drupal Site Friday, August 1, 14
  • 31. Automated Building • You only need to run install.php ONCE to set up your initial site • For future changes (e.g. via Jenkins), • This will delete DestDir (drupal root) and recreate your entire site! cd ProfileLocation git checkout develop git pull origin develop mv DestDir/sites /tmp/sites drush make --contrib-destination=profiles/myprofile build-profile.make DestDir rsync -r ProfileLocation/ DestDir/profiles/myprofile mv /tmp/sites DestDir/sites cd DestDir drush updb drush fra -y drush cc all Friday, August 1, 14
  • 32. “Fake” profiles • Install Drupal normally • Use “drush make” to create files in profiles/profileName • Tell Drupal you installed with a profile: drush vset install_profile profileName • Now Drupal will look in profiles/profileName for modules • Don’t need profileName.profile or profileName.install files • profileName.info can be a “stub” file (ADVANCED) Friday, August 1, 14
  • 33. Why use Profiles? (revisited) • Easily separate common code from site-specific code • Documents exact module dependencies and patches (via drush make files) • Easier to control module updates • Can build upon other profiles (*) Friday, August 1, 14
  • 35. Making DEV like PROD • Development environment often doesn’t match configuration of Production environment: • PROD has caching (Varnish, etc) • OS Differences (PROD on Linux, DEV on Mac) • Version consistency of Apache, PHP, MySQL, etc • Configuration consistency Friday, August 1, 14
  • 36. Virtual Machines (VM) • VirtualBox (free), VMware, etc • Allows you to run a completely separate machine within your own computer • Can create a separate VM for each client project • Works on PC, Mac, Linux • Can take a while to configure • Can use a lot of resources (memory, disk) Friday, August 1, 14
  • 37. Vagrant • Vagrant is like a MAKE file for VMs • Vagrant configuration sets RAM, CPU, etc • Allows you to spin up a VM locally that matches PROD (can also spin up on Amazon, Rackspace, etc) • Acts as a command-line wrapper around VirtualBox/VMWare Friday, August 1, 14
  • 38. Puppet (or Chef) • Puppet is like a MAKE file for the Software configuration. • Controls version and configuration of Apache, nginx, PHP, drush, MySQL, etc. • Can be used to configure both DEV and PROD (doesn’t require a VM) • Helps document exact server configurations • See https://puphpet.com/ for interactive puppet script creator. Friday, August 1, 14
  • 39. IDE (Integrated Development Environment) • Code styling (Drupal coding standard) • Code analysis (unused variables, missing returns, etc) • Integrated Debugging (breakpoints, step, variable inspect) • Integration with version control (git) • Integration with other tools (Vagrant, ssh, gitflow) • Drupal integration • (I personally use PHPStorm) Friday, August 1, 14
  • 40. Summary • Define your environments • Create a deployment process (and stick with it) • Match DEV and PROD as much as possible • Keep hands off PROD! (everything in code) • Automate all the things • Use all the tools Friday, August 1, 14