The project I am working on were are trying to come up with a solution for having the database and code be agile and be able to be built and deployed together.
Since the application is a combination of code plus the database schema, and database code tables, you can not truly have a full build of the application unless you have a database that is versioned along with the code.
We have not yet been able to come up with a good agile method of doing the database development along with the code in an agile/scrum environment.
Here are some of my requirements:
- I want to be able to have a svn revision # that corresponds to a complete build of the system.
- I do not want to check in binary files into source control for the database.
- Developers need to be able to commit code to the continuous integration server and build the entire system and database together.
- Must be able to automate deployment to different environments without doing a rebuild other than the original build on the build server.
(Update) I'll add some more info here to explain a bit further.
No OR/M tool, since its a legacy project with a huge amount of code. I have read the agile database design information, and that process in isolation seems to work, but I am talking about combining it with active code development.
Here are two scenario's
Developer checks in a code change, that requires a database change. The developer should be able to check in a database change at the same time, so that the automated build doesn't fail.
Developer checks in a DB change, that should break code. The automated build needs to run and fail.
The biggest problem is, how do these things synch up. There is no such thing as "checking in a database change". Right now the application of the DB changes is a manual process someone has to do, while code change are constantly being made. They need to be made together and checked together, the build system needs to be able to build the entire system.
(Update 2) One more add here:
You can't bring down production, you must patch it. Its not acceptable to rebuild the entire production database.