php deployment with svn
DESCRIPTION
Talk from the Dutch PHP Conference 2008 about deploying PHP with Subversion. Includes mention of a nabaztagTRANSCRIPT
![Page 1: PHP Deployment With SVN](https://reader034.vdocuments.net/reader034/viewer/2022052505/55580f57d8b42ae31c8b550d/html5/thumbnails/1.jpg)
Ibuildings
PHP Deployment with Subversion
Lorna Mitchell
IbuildingsThe PHP Professionals
![Page 2: PHP Deployment With SVN](https://reader034.vdocuments.net/reader034/viewer/2022052505/55580f57d8b42ae31c8b550d/html5/thumbnails/2.jpg)
2
About Me
• Lorna Mitchell• PHP Developer/Consultant/Trainer with Ibuildings• ZCE• Member of http://www.phpwomen.org• Personal blog at http://www.lornajane.net
2
![Page 3: PHP Deployment With SVN](https://reader034.vdocuments.net/reader034/viewer/2022052505/55580f57d8b42ae31c8b550d/html5/thumbnails/3.jpg)
SVN and Deployment
• Deployment process• Deployment mechanism• Subversion• Other tools
3
![Page 4: PHP Deployment With SVN](https://reader034.vdocuments.net/reader034/viewer/2022052505/55580f57d8b42ae31c8b550d/html5/thumbnails/4.jpg)
In The Beginning
• One Developer• Code on PC• FTP / SCP / Upload to live server• It works!
4
![Page 5: PHP Deployment With SVN](https://reader034.vdocuments.net/reader034/viewer/2022052505/55580f57d8b42ae31c8b550d/html5/thumbnails/5.jpg)
Early Development Team
• More developers• Development server• Ideally one copy per developer, a testing/staging
server and a live platform
Devarea
Devarea
Devarea
Devarea
Devarea
LIVE
Staging
5
![Page 6: PHP Deployment With SVN](https://reader034.vdocuments.net/reader034/viewer/2022052505/55580f57d8b42ae31c8b550d/html5/thumbnails/6.jpg)
Deployment Considerations
• Multiple platforms prompt context-aware configuration
• File permissions may need checking, for example on cache directories
• If the live site has uploaded files stored in the file system, need to preserve this content
• Compile step for initialising compiled templates or populating caches
6
![Page 7: PHP Deployment With SVN](https://reader034.vdocuments.net/reader034/viewer/2022052505/55580f57d8b42ae31c8b550d/html5/thumbnails/7.jpg)
Deployment Plan
• A deployment plan is a recipe for moving code• Step-by-step instructions for setting up a new
version of code• Must always be accompanied by a rollback plan• This process should be as automated as possible
7
![Page 8: PHP Deployment With SVN](https://reader034.vdocuments.net/reader034/viewer/2022052505/55580f57d8b42ae31c8b550d/html5/thumbnails/8.jpg)
Example Deployment Plan
• Avoid missing steps when putting live
Export from repositoryTar
UntarSet permissionsSwitch symlinks
Upload
8
![Page 9: PHP Deployment With SVN](https://reader034.vdocuments.net/reader034/viewer/2022052505/55580f57d8b42ae31c8b550d/html5/thumbnails/9.jpg)
Symlinks
Existing live code
existing
New code version
preparing
Live-site (symlink)
�
New code version
ready
9
![Page 10: PHP Deployment With SVN](https://reader034.vdocuments.net/reader034/viewer/2022052505/55580f57d8b42ae31c8b550d/html5/thumbnails/10.jpg)
Code Transport
• Copy development code to live• Rsync development code to live• Check out to live and update• Export to live• Patch changes from last live version only – requires
version meta-data
10
![Page 11: PHP Deployment With SVN](https://reader034.vdocuments.net/reader034/viewer/2022052505/55580f57d8b42ae31c8b550d/html5/thumbnails/11.jpg)
Commit Hooks
• Subversion can run scripts on given events, called “commit hooks” Pre-commit Post-commit
• Run test suite• Coding standards conformance• Syntax check• No “forgetting” any steps
11
![Page 12: PHP Deployment With SVN](https://reader034.vdocuments.net/reader034/viewer/2022052505/55580f57d8b42ae31c8b550d/html5/thumbnails/12.jpg)
Notifications
• Can use the commit hooks to trigger information• Email team
Diff Changes Test coverage/outcomes
• Ticker/big screen• Nabaztag
12
![Page 13: PHP Deployment With SVN](https://reader034.vdocuments.net/reader034/viewer/2022052505/55580f57d8b42ae31c8b550d/html5/thumbnails/13.jpg)
Source Control Packages
• Subversion http://subversion.tigris.org • CVS http://www.cvshome.org• GIT http://git.or.cz• Bazaar http://bazaar-vcs.org• Visual Source Safe
13
![Page 14: PHP Deployment With SVN](https://reader034.vdocuments.net/reader034/viewer/2022052505/55580f57d8b42ae31c8b550d/html5/thumbnails/14.jpg)
Source Control Clients
• Command line tools• TortoiseSVN: http://tortoise.tigris.org • IDE Plugins: for Zend Studio, Komodo, etc• WebSVN: http://websvn.tigris.org
SFM (Safe For Managers)
�
• Trac: http://trac.edgewall.org/
14
![Page 15: PHP Deployment With SVN](https://reader034.vdocuments.net/reader034/viewer/2022052505/55580f57d8b42ae31c8b550d/html5/thumbnails/15.jpg)
Source Control Concepts
• Individuals communicate with repository• Keeping place• Collaboration tool• Historic versions
15
![Page 16: PHP Deployment With SVN](https://reader034.vdocuments.net/reader034/viewer/2022052505/55580f57d8b42ae31c8b550d/html5/thumbnails/16.jpg)
Collaboration
• Two people operate on different files Changes are combined
• Two people change the same file Changes are merged if changes don't overlap
• Allows teams to easily work on different parts of the system
16
![Page 17: PHP Deployment With SVN](https://reader034.vdocuments.net/reader034/viewer/2022052505/55580f57d8b42ae31c8b550d/html5/thumbnails/17.jpg)
Collaboration Example
$greeting = 'hello world';echo $greeting;
$greeting = 'hey people';echo $greeting;
$greeting = 'hello world';print $greeting;
$greeting = 'hey people';print $greeting;
17
![Page 18: PHP Deployment With SVN](https://reader034.vdocuments.net/reader034/viewer/2022052505/55580f57d8b42ae31c8b550d/html5/thumbnails/18.jpg)
Conflicts
• Two people edit the same part of the same file Includes both adding a new method to the end of a class
• Subversion will notify you of the conflict and provide: Your most recent version The version from the repository Its best guess at a merge with some notation for where
the overlaps are
18
![Page 19: PHP Deployment With SVN](https://reader034.vdocuments.net/reader034/viewer/2022052505/55580f57d8b42ae31c8b550d/html5/thumbnails/19.jpg)
Conflict Example
$greeting = 'hello world';echo $greeting;
$greeting = 'hey people';echo $greeting;
$greeting = 'hi universe';echo $greeting;
$greeting = 'hey people';echo $greeting;
19
![Page 20: PHP Deployment With SVN](https://reader034.vdocuments.net/reader034/viewer/2022052505/55580f57d8b42ae31c8b550d/html5/thumbnails/20.jpg)
Conflict Example
<<<<<<< .mine$greeting = 'hi universe';=======$greeting = 'hey people';>>>>>>> .r366echo $greeting;
greeting.php
$greeting = 'hi universe';echo $greeting;
greeting.php.mine
$greeting = 'hey people';echo $greeting;
greeting.php.r366
$greeting = 'hello world';echo $greeting;
greeting.php.r365
• Correct greeting.php and then let Subversion know you have resolved the conflict
20
![Page 21: PHP Deployment With SVN](https://reader034.vdocuments.net/reader034/viewer/2022052505/55580f57d8b42ae31c8b550d/html5/thumbnails/21.jpg)
Branching
21
![Page 22: PHP Deployment With SVN](https://reader034.vdocuments.net/reader034/viewer/2022052505/55580f57d8b42ae31c8b550d/html5/thumbnails/22.jpg)
Branching Example
version 1.1
version 1.2
development branch
Development done,merge in changes
bug fix
bug fixbackport
Delete extrabranch
trunk
22
![Page 23: PHP Deployment With SVN](https://reader034.vdocuments.net/reader034/viewer/2022052505/55580f57d8b42ae31c8b550d/html5/thumbnails/23.jpg)
Tagging Versions
• Source control tools allow you to label releases, called “tags”
• Subversion has one revision number for a whole repository, incrementing on every commit
• CVS has one revision number per file• In either case its nice to have “client preview” or
“release 4.11” as human readable markers
23
![Page 24: PHP Deployment With SVN](https://reader034.vdocuments.net/reader034/viewer/2022052505/55580f57d8b42ae31c8b550d/html5/thumbnails/24.jpg)
Repository Structure
• Repository layout choices• Deployment point choices• Affected by process• Dependent on product type
24
![Page 25: PHP Deployment With SVN](https://reader034.vdocuments.net/reader034/viewer/2022052505/55580f57d8b42ae31c8b550d/html5/thumbnails/25.jpg)
Cyclic Releases
• Periodic release cycle• Need to maintain existing version• Start developing new version• May need to fix bugs in both versions• Use branching
25
![Page 26: PHP Deployment With SVN](https://reader034.vdocuments.net/reader034/viewer/2022052505/55580f57d8b42ae31c8b550d/html5/thumbnails/26.jpg)
Continuous Releases
• Changes to branch• Branch merged to trunk• Can patch changes from branch to trunk for bug
fixes• Deployment from trunk
26
![Page 27: PHP Deployment With SVN](https://reader034.vdocuments.net/reader034/viewer/2022052505/55580f57d8b42ae31c8b550d/html5/thumbnails/27.jpg)
Branch Deployment
version 1.1
version 1.2
development branch
testing
deployment!
trunk
27
![Page 28: PHP Deployment With SVN](https://reader034.vdocuments.net/reader034/viewer/2022052505/55580f57d8b42ae31c8b550d/html5/thumbnails/28.jpg)
Live Branch
• Changes to branch• Branch merged to trunk• Testing performed on trunk• Changes then patched to live branch• Deployment from live branch
28
![Page 29: PHP Deployment With SVN](https://reader034.vdocuments.net/reader034/viewer/2022052505/55580f57d8b42ae31c8b550d/html5/thumbnails/29.jpg)
Live Branch Deployment
development branch
testing
live branch
approved changes
deployment!
trunk
29
![Page 30: PHP Deployment With SVN](https://reader034.vdocuments.net/reader034/viewer/2022052505/55580f57d8b42ae31c8b550d/html5/thumbnails/30.jpg)
Database Versioning
• Copying exported versions around Risk losing live data
• Make structure changes to all platforms Put objects in scripts
• Simple patching strategy No direct database operations Numbered patch files in subversion Include patches in script Give database awareness of current patch level Keep an installation script updated with all changes
30
![Page 31: PHP Deployment With SVN](https://reader034.vdocuments.net/reader034/viewer/2022052505/55580f57d8b42ae31c8b550d/html5/thumbnails/31.jpg)
Database Rollback
• Write patch file• Also write undo file
-- release.2.0.sql
create table friends(
user_id int not null
friend_user_id int not null
created_date timestamp default current_timestamp not null
);
-- release.2.0.undo.sql
drop table friends;
31
![Page 32: PHP Deployment With SVN](https://reader034.vdocuments.net/reader034/viewer/2022052505/55580f57d8b42ae31c8b550d/html5/thumbnails/32.jpg)
DbMorph
• Tool developed by Maggie Nelson• DbMorph, very early version http://sourceforge.net/
projects/dbmorph • Also see Maggie's homepage
http://objectivelyoriented.com • Slides from her talk at php|tek “Keeping Your
Database and PHP in Sync”
32
![Page 33: PHP Deployment With SVN](https://reader034.vdocuments.net/reader034/viewer/2022052505/55580f57d8b42ae31c8b550d/html5/thumbnails/33.jpg)
Other Tools
• Phing http://phing.info Project build system based on Apache Ant XML configuration Integration with SVN Available through PEAR
• Phar http://pecl.php.net/package/phar Package management for PHP Like JAR for Java Self-extracting option PECL module
33
![Page 34: PHP Deployment With SVN](https://reader034.vdocuments.net/reader034/viewer/2022052505/55580f57d8b42ae31c8b550d/html5/thumbnails/34.jpg)
SVN and Deployment
• Deployment process• Deployment mechanism• Subversion• Other tools
34