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:
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.
I can roll-back to the previous stable version without an interruption in service.
I then defined the following intermediate versions:
Version 0.0.0: Current codebase
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.
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
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
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.