23
APPLICATION VERSIONING Basics of branching, tagging and packaging for product release management with SVN Ted Steinmann

Application versioning

Embed Size (px)

DESCRIPTION

TCCFUG presentation on

Citation preview

Page 1: Application versioning

APPLICATION VERSIONING

Basics of branching, tagging and packaging

for product release management with SVN

Ted Steinmann

Page 2: Application versioning

About Me

Building & Deploying CF Web apps for 4 years

ImageTrend, Inc. Lead Developer Employee 3+ years

cf.Objective() attendee 3 years running MAX 2008 (San Francisco) Attendee Avid hiker, snowboarder & single-track

rider

Page 3: Application versioning

Experience

Involved, at some point, in most stages of the ColdFusion based development, design, implementation & support of large scale enterprise applications for ImageTrend’s Emergency Data Systems solutions EMS, Fire, Trauma, Emergency Preparedness, Licensing

Strong proponent of SVN, versioning and iterative release processes using the unstable branching strategy who has been involved with company wide implementation throughout various projects.

Page 4: Application versioning

Summary

Why SVN? Environmental

Considerations Branching Strategies

Branching Tagging Versioning Packaging Publishing

Page 5: Application versioning

Why SVN?

Open source/free Widely used & supported

Many Eclipse plugins Supports

Remote disconnected development Continuous/Synchronous development Distributed Development

Extendable integrations Properties such as bug tracking id

Atomic commits Project wide undue button

Page 6: Application versioning

Environmental Considerations

Development Alpha Beta Staging Production

Source control server SVN Visual SVN

Source control client Tortoise SVN

Build Script Automated deployment

Application Environments

Supporting Environments & considerations

Page 7: Application versioning

Environmental Considerations Developers copy

Checkout – Trunk Alpha

Checkout – Trunk Auto update – post-commit-hook

Beta Checkout – Release Branch or Trunk (switch)

Staging or production Export from tagged release

Page 9: Application versioning

Branching

Enables independent lines of development Share a common history with the mainline/trunk New feature development, release

prep/management Isolated development environments Copy of another branch/trunk at a point in time

Page 10: Application versioning

Branching Strategies

The Unstable Trunk Serial Releases

The Stable Trunk Parallel Releases

The Agile Branching Strategy Delayed definition Features that may never make it into the product

Branching strategies can be intermingled, but choosing one and sticking with it creates transparency, simplicity, & consistency.Strategies are suggested usage or best practices but not enforced by subversion.

All strategies support Agile development practices, agile branching supports more reactive undefined chaotic development and places more time & effort on branching & merging than development.

Page 11: Application versioning

Unstable Trunk Strategy

Trunk Main line development of a product On going development for next release

Feature branch Safe place for development of features in isolation Development delivered later, NOT for next release Copy of branch (or Trunk) at a point in time

Release Branch Stable releasable/feature complete code set created to prepare for release Bug/defect fixes development performed or merged

here Tags are created from here

• Simplest most usable

• Payload development

• Serial development

Page 12: Application versioning

Unstable Trunk Diagram

Page 13: Application versioning

Tagging

Snap shot of a repository at a point in time Commonly a version number

REL-1.0 A tag is effectively the same thing as a

branch Best practices suggest NEVER committing

to a tag Tortoise will warn you but not prevent

You can tag a branch & branch a tag It’s easier to just create a branch from a

branch (or the trunk) at a revision that lines corresponds to a tag.

Page 14: Application versioning

Versioning

Wikipedia: Software versioning is the process of assigning

either unique version names or unique version numbers to unique states of computer software.

Generally numeric, and increasing order Every subsequent version contains all fixes &

enhancements from previous versions Versioning needs to make sense for

developers, marketing & existing customers

Page 15: Application versioning

Packaging

Gathering artifacts that make up a product Source Code

Store version info in source code Database scripts

Store version info in database Write scripts to be re-runnable

Repeatable process Automated/Scripted build & delivery

Page 16: Application versioning

Packaging (continued)

ANT Another Neat Tool Built into Eclipse

svn.exe command line utility CollabNet (one of many)

SVNKit Java Library

Database script compilation or versioning

Page 17: Application versioning

Packaging (continued)

Steps1. Compile database scripts2. Export code from a tag3. Strip out any un-necessary config or logs4. Deliver package

Page 18: Application versioning

Packaging

DEMO package.bat build.xml

Page 19: Application versioning

Merging

Copy differences from between 2 trees, and applying to a working copy for commit

Feature Branch Feature complete Expected in next release

Release Branch Merge when tagged Apply hot fixes to on going dev in Trunk

Page 20: Application versioning

Merging (continued)

Range of revisions Reintegrate Branch Merge two different trees

DEMO – Time Permitting

Page 21: Application versioning

Pointers

Merge as often as possible The longer a branch exists in isolation the

more difficult the merge KISS Do EVERYTHING from a working copy If you find yourself doing the same thing

over and over… script it… most of us are developers.

Page 22: Application versioning

Questions?

Page 23: Application versioning

Resources

Branching Strategy Questioned (Bob w/Collabnet) http://blogs.open.collab.net/svn/2007/11/branching-strat.html

Pragmatic version control using subversion http://www.pragprog.com/titles/svn2/pragmatic-version-control-using-subversion

Tortoise SVN Docs http://tortoisesvn.net/docs/release/TortoiseSVN_en/index.html

Wikipedia (Software Versioning) http://en.wikipedia.org/wiki/Software_versioning

Collabnet SVN (download) http://www.open.collab.net/downloads/subversion/

Eclipse – ANT & External tools tutorial http://

help.eclipse.org/ganymede/topic/org.eclipse.platform.doc.user/gettingStarted/qs-80_ant.htm

SVNKit (Java Library Integration – Jared Rypka-Hauer) http://www.alagad.com/blog/post.cfm/svnkit-coldfusion-and-you--

very-cool-java-cf-stuff