SlideShare ist ein Scribd-Unternehmen logo
1 von 42
Downloaden Sie, um offline zu lesen
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

Weitere ähnliche Inhalte

Was ist angesagt?

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
 

Was ist angesagt? (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
 

Andere mochten auch

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
 

Andere mochten auch (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
 

Ähnlich wie 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
 

Ähnlich wie 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
 

Mehr von 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
 

Mehr von 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
 

Kürzlich hochgeladen

Unleash Your Potential - Namagunga Girls Coding Club
Unleash Your Potential - Namagunga Girls Coding ClubUnleash Your Potential - Namagunga Girls Coding Club
Unleash Your Potential - Namagunga Girls Coding ClubKalema Edgar
 
Are Multi-Cloud and Serverless Good or Bad?
Are Multi-Cloud and Serverless Good or Bad?Are Multi-Cloud and Serverless Good or Bad?
Are Multi-Cloud and Serverless Good or Bad?Mattias Andersson
 
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
 
CloudStudio User manual (basic edition):
CloudStudio User manual (basic edition):CloudStudio User manual (basic edition):
CloudStudio User manual (basic edition):comworks
 
Dev Dives: Streamline document processing with UiPath Studio Web
Dev Dives: Streamline document processing with UiPath Studio WebDev Dives: Streamline document processing with UiPath Studio Web
Dev Dives: Streamline document processing with UiPath Studio WebUiPathCommunity
 
Hyperautomation and AI/ML: A Strategy for Digital Transformation Success.pdf
Hyperautomation and AI/ML: A Strategy for Digital Transformation Success.pdfHyperautomation and AI/ML: A Strategy for Digital Transformation Success.pdf
Hyperautomation and AI/ML: A Strategy for Digital Transformation Success.pdfPrecisely
 
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
 
What's New in Teams Calling, Meetings and Devices March 2024
What's New in Teams Calling, Meetings and Devices March 2024What's New in Teams Calling, Meetings and Devices March 2024
What's New in Teams Calling, Meetings and Devices March 2024Stephanie Beckett
 
Artificial intelligence in cctv survelliance.pptx
Artificial intelligence in cctv survelliance.pptxArtificial intelligence in cctv survelliance.pptx
Artificial intelligence in cctv survelliance.pptxhariprasad279825
 
Leverage Zilliz Serverless - Up to 50X Saving for Your Vector Storage Cost
Leverage Zilliz Serverless - Up to 50X Saving for Your Vector Storage CostLeverage Zilliz Serverless - Up to 50X Saving for Your Vector Storage Cost
Leverage Zilliz Serverless - Up to 50X Saving for Your Vector Storage CostZilliz
 
Developer Data Modeling Mistakes: From Postgres to NoSQL
Developer Data Modeling Mistakes: From Postgres to NoSQLDeveloper Data Modeling Mistakes: From Postgres to NoSQL
Developer Data Modeling Mistakes: From Postgres to NoSQLScyllaDB
 
Nell’iperspazio con Rocket: il Framework Web di Rust!
Nell’iperspazio con Rocket: il Framework Web di Rust!Nell’iperspazio con Rocket: il Framework Web di Rust!
Nell’iperspazio con Rocket: il Framework Web di Rust!Commit University
 
Powerpoint exploring the locations used in television show Time Clash
Powerpoint exploring the locations used in television show Time ClashPowerpoint exploring the locations used in television show Time Clash
Powerpoint exploring the locations used in television show Time Clashcharlottematthew16
 
"Debugging python applications inside k8s environment", Andrii Soldatenko
"Debugging python applications inside k8s environment", Andrii Soldatenko"Debugging python applications inside k8s environment", Andrii Soldatenko
"Debugging python applications inside k8s environment", Andrii SoldatenkoFwdays
 
Designing IA for AI - Information Architecture Conference 2024
Designing IA for AI - Information Architecture Conference 2024Designing IA for AI - Information Architecture Conference 2024
Designing IA for AI - Information Architecture Conference 2024Enterprise Knowledge
 
Advanced Computer Architecture – An Introduction
Advanced Computer Architecture – An IntroductionAdvanced Computer Architecture – An Introduction
Advanced Computer Architecture – An IntroductionDilum Bandara
 
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
 
Connect Wave/ connectwave Pitch Deck Presentation
Connect Wave/ connectwave Pitch Deck PresentationConnect Wave/ connectwave Pitch Deck Presentation
Connect Wave/ connectwave Pitch Deck PresentationSlibray Presentation
 
The Ultimate Guide to Choosing WordPress Pros and Cons
The Ultimate Guide to Choosing WordPress Pros and ConsThe Ultimate Guide to Choosing WordPress Pros and Cons
The Ultimate Guide to Choosing WordPress Pros and ConsPixlogix Infotech
 

Kürzlich hochgeladen (20)

DMCC Future of Trade Web3 - Special Edition
DMCC Future of Trade Web3 - Special EditionDMCC Future of Trade Web3 - Special Edition
DMCC Future of Trade Web3 - Special Edition
 
Unleash Your Potential - Namagunga Girls Coding Club
Unleash Your Potential - Namagunga Girls Coding ClubUnleash Your Potential - Namagunga Girls Coding Club
Unleash Your Potential - Namagunga Girls Coding Club
 
Are Multi-Cloud and Serverless Good or Bad?
Are Multi-Cloud and Serverless Good or Bad?Are Multi-Cloud and Serverless Good or Bad?
Are Multi-Cloud and Serverless Good or Bad?
 
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
 
CloudStudio User manual (basic edition):
CloudStudio User manual (basic edition):CloudStudio User manual (basic edition):
CloudStudio User manual (basic edition):
 
Dev Dives: Streamline document processing with UiPath Studio Web
Dev Dives: Streamline document processing with UiPath Studio WebDev Dives: Streamline document processing with UiPath Studio Web
Dev Dives: Streamline document processing with UiPath Studio Web
 
Hyperautomation and AI/ML: A Strategy for Digital Transformation Success.pdf
Hyperautomation and AI/ML: A Strategy for Digital Transformation Success.pdfHyperautomation and AI/ML: A Strategy for Digital Transformation Success.pdf
Hyperautomation and AI/ML: A Strategy for Digital Transformation Success.pdf
 
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
 
What's New in Teams Calling, Meetings and Devices March 2024
What's New in Teams Calling, Meetings and Devices March 2024What's New in Teams Calling, Meetings and Devices March 2024
What's New in Teams Calling, Meetings and Devices March 2024
 
Artificial intelligence in cctv survelliance.pptx
Artificial intelligence in cctv survelliance.pptxArtificial intelligence in cctv survelliance.pptx
Artificial intelligence in cctv survelliance.pptx
 
Leverage Zilliz Serverless - Up to 50X Saving for Your Vector Storage Cost
Leverage Zilliz Serverless - Up to 50X Saving for Your Vector Storage CostLeverage Zilliz Serverless - Up to 50X Saving for Your Vector Storage Cost
Leverage Zilliz Serverless - Up to 50X Saving for Your Vector Storage Cost
 
Developer Data Modeling Mistakes: From Postgres to NoSQL
Developer Data Modeling Mistakes: From Postgres to NoSQLDeveloper Data Modeling Mistakes: From Postgres to NoSQL
Developer Data Modeling Mistakes: From Postgres to NoSQL
 
Nell’iperspazio con Rocket: il Framework Web di Rust!
Nell’iperspazio con Rocket: il Framework Web di Rust!Nell’iperspazio con Rocket: il Framework Web di Rust!
Nell’iperspazio con Rocket: il Framework Web di Rust!
 
Powerpoint exploring the locations used in television show Time Clash
Powerpoint exploring the locations used in television show Time ClashPowerpoint exploring the locations used in television show Time Clash
Powerpoint exploring the locations used in television show Time Clash
 
"Debugging python applications inside k8s environment", Andrii Soldatenko
"Debugging python applications inside k8s environment", Andrii Soldatenko"Debugging python applications inside k8s environment", Andrii Soldatenko
"Debugging python applications inside k8s environment", Andrii Soldatenko
 
Designing IA for AI - Information Architecture Conference 2024
Designing IA for AI - Information Architecture Conference 2024Designing IA for AI - Information Architecture Conference 2024
Designing IA for AI - Information Architecture Conference 2024
 
Advanced Computer Architecture – An Introduction
Advanced Computer Architecture – An IntroductionAdvanced Computer Architecture – An Introduction
Advanced Computer Architecture – An Introduction
 
From Family Reminiscence to Scholarly Archive .
From Family Reminiscence to Scholarly Archive .From Family Reminiscence to Scholarly Archive .
From Family Reminiscence to Scholarly Archive .
 
Connect Wave/ connectwave Pitch Deck Presentation
Connect Wave/ connectwave Pitch Deck PresentationConnect Wave/ connectwave Pitch Deck Presentation
Connect Wave/ connectwave Pitch Deck Presentation
 
The Ultimate Guide to Choosing WordPress Pros and Cons
The Ultimate Guide to Choosing WordPress Pros and ConsThe Ultimate Guide to Choosing WordPress Pros and Cons
The Ultimate Guide to Choosing WordPress Pros and Cons
 

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