Stress-free
Deployment
Rob Allen
Rob Allen http://akrabat.comIPC ’09
Rob Allen?
Rob Allen http://akrabat.comIPC ’09
Why automate
deployment?
Rob Allen http://akrabat.comIPC ’09
Getting your house in
order
Rob Allen http://akrabat.comIPC ’09
Source code control
Rob Allen http://akrabat.comIPC ’09
Branch!
• Branch every new feature
• (that includes bug fixes)
• Be ready go live at al...
Rob Allen http://akrabat.comIPC ’09
Trunk deployment
Rob Allen http://akrabat.comIPC ’09
Live branch deployment
Rob Allen http://akrabat.comIPC ’09
What do I do?
Rob Allen http://akrabat.comIPC ’09
Database
considerations
Rob Allen http://akrabat.comIPC ’09
One master database
• Live database holds master structure
• Copy master to everywhere...
Rob Allen http://akrabat.comIPC ’09
Migrations
• Versioned schemas
• Use delta files with UP and DOWN functions
• Advantage...
Rob Allen http://akrabat.comIPC ’09
Code
considerations
Rob Allen http://akrabat.comIPC ’09
Context awareness
• Configuration based on where the code has been
deployed
• Automatic...
Rob Allen http://akrabat.comIPC ’09
So whatʼs deployment
all about?
Rob Allen http://akrabat.comIPC ’09
Things to think about
• Transport to server
• FTP? rsync? svn checkout? svn export?
• ...
Rob Allen http://akrabat.comIPC ’09
Server organisation
• Much easier if you control vhosts
• For multiple sites on same s...
Rob Allen http://akrabat.comIPC ’09
The deployment plan
Rob Allen http://akrabat.comIPC ’09
Typical steps
• Tag this release
• Set “under maintenance” page
• Transfer files to ser...
Rob Allen http://akrabat.comIPC ’09
Hereʼs mine:
• Branch trunk to release-{yymmdd-hhmm}
• ssh into server
• Ensure stagin...
Rob Allen http://akrabat.comIPC ’09
Deployment plan cont.
• Switch “current” symlink to new directory
Rob Allen http://akrabat.comIPC ’09
Tools for automation
Rob Allen http://akrabat.comIPC ’09
Simple scripts
• PHP, Bash or Bat files
• Simple to write and run
• Generally easier to...
Rob Allen http://akrabat.comIPC ’09
Example script
$cmd = "svn cp -m "Tag for automatic deployment"
$baseUrl/$website/trun...
Rob Allen http://akrabat.comIPC ’09
Phing
• PHP based build system based on Ant
• XML configuration files
• PEAR installatio...
Rob Allen http://akrabat.comIPC ’09
Phing philosophy"
• Like make, build scripts consist of targets
• Targets can depend o...
Rob Allen http://akrabat.comIPC ’09
Example build.xml
<?xml version="1.0" encoding="UTF-8" ?>
<project name="BRIBuild" def...
Rob Allen http://akrabat.comIPC ’09
My deployment system
Rob Allen http://akrabat.comIPC ’09
deploy.php
~$ deploy.php 23100
BRI server side deploy script
Version 1.1, 2009
Found /...
Rob Allen http://akrabat.comIPC ’09
Our server layout
Rob Allen http://akrabat.comIPC ’09
deploy.php
• Custom PHP script
• Relies on environment variable: WWW_DIR
• Advantages:...
Rob Allen http://akrabat.comIPC ’09
FTP deployments
<project name="project" basedir="." default="deploy">
<property file="...
Rob Allen http://akrabat.comIPC ’09
FTP deployments
<target name="ftp-upload">
<echo msg="Deploying application files" />
...
Rob Allen http://akrabat.comIPC ’09
FTP with Phing
• Per-website build.xml for custom deployments
• Advantages:
• Leverage...
Rob Allen http://akrabat.comIPC ’09
Rollback
Rob Allen http://akrabat.comIPC ’09
Emergency roll-back
Just change the symlink!
Rob Allen http://akrabat.comIPC ’09
Complete roll-back
• Write rollback.php or create a Phing build task
• Put the server ...
To summarise
1. Automated deployment prevents mistakes
2. Itʼs not hard
3. Easy roll-back is priceless
Rob Allen http://akrabat.comIPC ’09
Thank you
Please provide feedback on this talk: http://joind.in/1039
Upcoming SlideShare
Loading in...5
×

Stress Free Deployment

3,169

Published on

Published in: Technology
0 Comments
1 Like
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total Views
3,169
On Slideshare
0
From Embeds
0
Number of Embeds
1
Actions
Shares
0
Downloads
12
Comments
0
Likes
1
Embeds 0
No embeds

No notes for slide

Stress Free Deployment

  1. 1. Stress-free Deployment Rob Allen
  2. 2. Rob Allen http://akrabat.comIPC ’09 Rob Allen?
  3. 3. Rob Allen http://akrabat.comIPC ’09 Why automate deployment?
  4. 4. Rob Allen http://akrabat.comIPC ’09 Getting your house in order
  5. 5. Rob Allen http://akrabat.comIPC ’09 Source code control
  6. 6. Rob Allen http://akrabat.comIPC ’09 Branch! • Branch every new feature • (that includes bug fixes) • Be ready go live at all times • Trunk deployment • Live branch deployment
  7. 7. Rob Allen http://akrabat.comIPC ’09 Trunk deployment
  8. 8. Rob Allen http://akrabat.comIPC ’09 Live branch deployment
  9. 9. Rob Allen http://akrabat.comIPC ’09 What do I do?
  10. 10. Rob Allen http://akrabat.comIPC ’09 Database considerations
  11. 11. Rob Allen http://akrabat.comIPC ’09 One master database • Live database holds master structure • Copy master to everywhere else • Advantages: • Simple to implement • Disadvantages: • Backwards compatibility required • Doesnʼt scale for multiple devs well • Easy to make mistakes
  12. 12. Rob Allen http://akrabat.comIPC ’09 Migrations • Versioned schemas • Use delta files with UP and DOWN functions • Advantages: • version controlled • destructive changes possible • Disadvantages: • Canʼt think of any! • Tools: • DbDeploy, LiquiBase, Doctrine, homebrew script
  13. 13. Rob Allen http://akrabat.comIPC ’09 Code considerations
  14. 14. Rob Allen http://akrabat.comIPC ’09 Context awareness • Configuration based on where the code has been deployed • Automatic detection based on URL? • Environment variable set in vhost defintion?
  15. 15. Rob Allen http://akrabat.comIPC ’09 So whatʼs deployment all about?
  16. 16. Rob Allen http://akrabat.comIPC ’09 Things to think about • Transport to server • FTP? rsync? svn checkout? svn export? • File permissions • Preserve user uploaded files • Steps after upload • Stale cache? • Cache priming?
  17. 17. Rob Allen http://akrabat.comIPC ’09 Server organisation • Much easier if you control vhosts • For multiple sites on same server: • You want predictable file locations for all sites • e.g: • /home/www/{site name}/live/current • /home/www/{site name}/staging/current
  18. 18. Rob Allen http://akrabat.comIPC ’09 The deployment plan
  19. 19. Rob Allen http://akrabat.comIPC ’09 Typical steps • Tag this release • Set “under maintenance” page • Transfer files to server • Set file permissions as required • Delete old cache files • Run database migrations if required • Remove “under maintenance” page
  20. 20. Rob Allen http://akrabat.comIPC ’09 Hereʼs mine: • Branch trunk to release-{yymmdd-hhmm} • ssh into server • Ensure staging is up to date (svn st -u) • If not, stop here! • svn checkout new release branch to a new folder in live directory • Set permissions on the /tmp folder for cache files
  21. 21. Rob Allen http://akrabat.comIPC ’09 Deployment plan cont. • Switch “current” symlink to new directory
  22. 22. Rob Allen http://akrabat.comIPC ’09 Tools for automation
  23. 23. Rob Allen http://akrabat.comIPC ’09 Simple scripts • PHP, Bash or Bat files • Simple to write and run • Generally easier to run on the correct server • Execute command line apps via exec()
  24. 24. Rob Allen http://akrabat.comIPC ’09 Example script $cmd = "svn cp -m "Tag for automatic deployment" $baseUrl/$website/trunk $baseUrl/$website/tags/$date"; ob_start(); system($cmd, $returnValue); $output = ob_get_clean(); if (0 < $returnValue) { throw new Exception("Tagging failed.n" . $output); } echo "Tagged to $daten";
  25. 25. Rob Allen http://akrabat.comIPC ’09 Phing • PHP based build system based on Ant • XML configuration files • PEAR installation • Integration with Subversion and DbDeploy • Expects to run build.xml in current directory • build.properties contains config info
  26. 26. Rob Allen http://akrabat.comIPC ’09 Phing philosophy" • Like make, build scripts consist of targets • Targets can depend on other targets • “live” depends on “tag”, “checkout”, “migrate” • Each target does the minimum it can e.g. • Create svn tag • checkout files to destination • migrate database
  27. 27. Rob Allen http://akrabat.comIPC ’09 Example build.xml <?xml version="1.0" encoding="UTF-8" ?> <project name="BRIBuild" default="deploy" basedir="."> <tstamp> <format property="date" pattern="%Y%m%d-%H%M" /> </tstamp> <property file="build.properties" /> <property name="trunkpath" value="${svnpath}/${website}/trunk" /> <property name="tagpath" value="${svnpath}/${website}/tags/${date}" /> <target name="deploy" depends="tag" /> <target name="tag" description="Tag trunk"> <exec command="svn cp -m 'Tag for automatic deployment' ${trunkpath} ${tagpath}" /> <echo msg="Tagged trunk to ${date}" /> </target> </project>
  28. 28. Rob Allen http://akrabat.comIPC ’09 My deployment system
  29. 29. Rob Allen http://akrabat.comIPC ’09 deploy.php ~$ deploy.php 23100 BRI server side deploy script Version 1.1, 2009 Found /home/domains/bigroom/live/ Tagging to 20091030-2303... done Deploying 20091030-2303 ... done Changing symlink to new checkout Cleaning up older checkouts 23100 successfully deployed to /home/domains/bigroom/live/
  30. 30. Rob Allen http://akrabat.comIPC ’09 Our server layout
  31. 31. Rob Allen http://akrabat.comIPC ’09 deploy.php • Custom PHP script • Relies on environment variable: WWW_DIR • Advantages: • Custom designed to fit our way of working • PHP! Quick and easy to write. • Disadvantages: • Hard to alter for a specific server • Hard to change methodology
  32. 32. Rob Allen http://akrabat.comIPC ’09 FTP deployments <project name="project" basedir="." default="deploy"> <property file="build.properties" /> <property name="trunkpath" value="${svnpath}/${website}/trunk" /> <fileset dir="${exportdir}/" id="files"> <include name="**/*" /> </fileset> <target name="deploy" depends="svnexport,ftp-upload" /> <target name="svnexport"> <delete dir="${exportdir}" /> <svnexport username="${username}" password="${password}" nocache="true" force="true" repositoryurl="${trunkpath}" todir="${exportdir}" /> </target>
  33. 33. Rob Allen http://akrabat.comIPC ’09 FTP deployments <target name="ftp-upload"> <echo msg="Deploying application files" /> <ftpdeploy host="${ftp.host}" port="${ftp.port}" username="${ftp.username}" password="${ftp.password}" dir="${ftp.dir}"> <fileset refid="${files}" /> </ftpdeploy> </target> </project>
  34. 34. Rob Allen http://akrabat.comIPC ’09 FTP with Phing • Per-website build.xml for custom deployments • Advantages: • Leverages other peopleʼs experiences • Was very fast to create • Integrates with xinc • Disadvantages: • New technology to be learnt • Phing beta and Pear_Version_SVN alpha
  35. 35. Rob Allen http://akrabat.comIPC ’09 Rollback
  36. 36. Rob Allen http://akrabat.comIPC ’09 Emergency roll-back Just change the symlink!
  37. 37. Rob Allen http://akrabat.comIPC ’09 Complete roll-back • Write rollback.php or create a Phing build task • Put the server back to where it was before • Change the symlink • Delete the deployed directory • Database rollback • Run down() delta in your migration tool
  38. 38. To summarise 1. Automated deployment prevents mistakes 2. Itʼs not hard 3. Easy roll-back is priceless
  39. 39. Rob Allen http://akrabat.comIPC ’09 Thank you Please provide feedback on this talk: http://joind.in/1039
  1. A particular slide catching your eye?

    Clipping is a handy way to collect important slides you want to go back to later.

×