views:

34

answers:

2

hello...

We have a fairly large java web app and all new features, bug fixes, etc. are being managed manually... This is becoming a very tedious task to keep track of everything that has changed and then move them from dev to pre production and finally to production so we are looking for a way to better manage this. Obviously we need to implement some sort of version control system but we are unsure of what route would be the best to take and even after selecting a vcs are unsure of the best way to push changes between environments... Would we need to setup different repositories for each? Can anyone recommend a good article on something like this?

thanks..

A: 

STOP !!! If you have more than one developer on the team; You must get a Version Control System right now, as well as an automated build process. Without that you are creating yourself more headaches than it is worth.
It is worth taking the time and getting this in place. Without that you cannot guarantee what is in any build and the quality has to be pretty bad or the amount of work must be staggering.
Many good version control systems are free now so money is not an issue.

We use SVN and build with ant. Everybody has a fully working environment on their machine (There are some servers that we need to point to for some stuff) So everybody codes builds and tests on their machine. When they are done the production code is merged with their code. developers unit test and if it is good the code is checked in.

On an integration machine the code is extracted from the repository, built and deployed (This is done via a batch file). The code is then tested by the test team. If the code is succesfully tested by the test team (There is a defect <-> fix iteration here) then the binaries are moved to production.

Once the code is in production is running then the branch is reintegrated into the trunk. The trunk is always the current production version.

Romain Hippeau
A: 

Generally: Every "live" application needs a VCS and a one-click deploy process.

My specific advice: Git as VCS, capistrano to deploy builds to preprod/prod. In Git, I have a different branch for each (dev, test, live). I write code in dev, then commit it when I'm done. I switch to test branch, git merge dev to bring in the new changes, and git push to send it upstream (to my Git repository server) -- I actually have a bash script 'sendtotest.sh' to do these two steps, because a one-key update process is CRITICAL. Test servers have a cron job to git pull every minute (and have checked out the 'test' branch). Live follows the same process- When tested code is good to go, I run 'maketestlive.sh' and the same git merging happens.

linked