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.