views:

239

answers:

6

Are there any so-called "version control systems" that also support actual release management / deployment ?

The mainframe shop I used to work for, had an automated release management tool that did not only control concurrent modifications to sources, but that also took care of running compilers, precompilers, database bind utilities etc. etc., making it our fully automated deployment tool as well.

My understanding is that "more modern" version control tools support only the source management part. Is that understanding correct ?

+4  A: 

This is absolutely incorrect. Any modern version control tool supports both pre and post commit hooks, at which point you can run any code you want.

In subversion, we use the post-commit hook to deploy a copy of the app to the dev server every time a developer checks in code.

In our actual production servers, we have code that verifies and then deploys stable minor version tags as they are committed to the repo by the release managers.

Paul McMillan
A: 

It depends how much money and time you wish to invest in such system. many people use simple version control - like svn, and manage manually releases (using Labels, and branches) There are other (free) tools for continuous integration (constant building the app) like cruisecontrol.

IN the database field I don't know anything good in the free world, but someone here might complete this. so by now I manage database versions manually....

Dani
A: 

I think what you are calling release management here is more often called build automation. There are various tools in this space (make, ant, Nant, etc), but they tend to exist as seperate tools. The can often pull code from seperate source control, and you get products designed to oversee the process (which is called continuous integration when it is done automatically.)

There are some vendors who ship end-to-end tools which go under the heading Application Lifecycle Management

Colin Pickard
+3  A: 

Version control has little to do with release management or deployment, so it makes sense that the VCSs don't try to do this as well.

What I've seen in this area are build or Continuous Integration (CI) servers. These listen to changes in the VCS, do a fresh checkout on any commit and then try to build everything. So they integrate the VCS and the build tools, collect the logs from them and present everything in a nice web UI.

This way, every tool can stay simple.

[EDIT] Added value of a CI server:

  1. It can analyze the output of your build scripts and present an overview in a mail or a web page.

  2. It makes sure that all tests are run after a commit. No more "but it runs for me".

  3. Some of them support deferred commit (it will only commit changes to the VCS when all tests run)

  4. It can run builds on several projects which depend on each other.

Aaron Digulla
I'm unclear how these provide added value beyond the standard "run your build process after a commit". It's a nice buzzword, but where's the value added that you don't otherwise have in your build script?
Paul McMillan
Run just about anything you please, distribute builds across multiple agents, build based upon dependencies, schedule long running builds and/or tests, run integration scripts, pro-actively advise users as to failures by multiple means, provide "dashboards" to allow you to look at all of the above, host build artifacts... in one sense yes, all it is automated script running but then that's like saying that all a build script does is run commands you can do by hand.
Murph
CI is more than a buzzword. We use CruiseControl.NET to not only build on commit, but also to run numerous tests including automated GUI tests. The CI server helps catch bugs or unexpected behavior closer to there introduction. The CI server usually knows the build is broken before anyone else on the team. All release candidate builds come from the CI server and therefore we can be sure that our whole suite of tests have been run on the actual the release binaries.
Jerry Fernholz
A: 

--> My understanding is that "more modern" version control tools support only the source management part. Is that understanding correct ?

The VCS just deals with the source management part, and it is pointless if you are unable you get notifications of the changes (and after someone implemented the vcs basics there will be no difficulty to provides this ;-) )

--> The mainframe shop I used to work for, had an automated release management tool that did not only control concurrent modifications to sources, but that also took care of running compilers, precompilers, database bind utilities etc. etc., making it our fully automated deployment tool as well.

This is called build automation, and yes, it's very desirable if the best bits of the project get "ready to ship" when someone makes a change but no necessary. You can do anything you want with the tools mentioned previously (they are extensible).

The continuous integration practice is the interpolation of these points in the way such that you only have a clean, stable, and noble code in the repositories. There are the so called CI servers that connects the VC and the BA parts.

check this page for CI http://martinfowler.com/articles/continuousIntegration.html

and if anyone needs a CI server compatible with many BA tools and many VCS take a look at JetBrains TeamCity

hope this helps

Horacio N. Hdez.
A: 

In the ruby on rails world Capistrano is the deployment tool of choice.

http://www.capify.org/index.php/Capistrano

Jerry Fernholz