Implementing a Build and Release System

cbrooks on 2003-01-08T20:19:59

For the better part of the last year, I have intended to implement a build and release system for the company at which I work. I wanted to do this project the "right" way -- i.e. specify the functionality; design the modules, define the interface to CVS, etc. However, I have finally accepted that I will never start this project (much less finish it) if I build it this way.



So, In the middle of December, I decided to take a different approach. I decided that the only way I would actually finish the project was to break it into small, incremental steps. I wouldn't have to understand exactly how the entire system works before beginning -- it is enough to build the pieces that I do understand, and gradually fill in the gaps.



The project will be successfully completed when the following two criteria are met:

  1. I can copy a stable version of our code base from our staging server to our production server and release it without an interruption in service.
  2. I can roll-back to the previous stable version without an interruption in service.


I then defined the following intermediate versions:
  1. Version 0.0.0: Current codebase
  2. Version 0.2.0: Versioning (01/01/03)
    • I would establish and document a version and build numbering system.
    • I would begin logging version changes
    • I would report the current production version in our tech_stats.pl script, which is the central dashboard for stats for the Tech Department.
  3. Version 0.4.0: Testing (01/15/03)
    • Run nightly smoke tests
    • Ensure that all tests pass
    • I would report the previous night's testing status in the tech_stats.pl script
  4. Version 0.6.0: 95% sync-up between production and staging (02/15/03)
    • Sync all CPAN modules on staging and production server
    • Make sure all application files are the same on the staging server and the production server
    • Make sure there are no files that exist on the production server but not the staging server
  5. Version 1.0.0: First automated stable release (03/31/03)
    • Integrate w/CVS tags using trunk and branches methodology
    • Remove deprecated functionality and database tables


I am happy to report that I released version 0.2.0 on 01/03/03, and am proceeding on version 0.4.0.