I am a .net guy and therefore work with things in the Windows world ... said that although the technologies that I work with daily to manage the build processes came from your world! (Linux / java technologies are in brackets, but I have included their equivalent for Windows readers) I use CruiseControl.NET ( CruiseControl ), VisualSVN ( SVN ), Tortoise and NAnt ( Ant ) to take care of all my build needs.
All my assemblies are usually automatically placed and marked during registration. This is done using CruiseControl as it controls my original control (SVN or SubVersion). When CruiseControl (CC) sees that the new code has been verified, it will execute the CC project, which in turn is called on the Ant script on the build server.
Ant script does a few things for me in the general assembly. It will check a copy of the latest code and transfer it to the build server. He will then build the code to make sure that something is at least compiled. Then it installs a clean copy of my database and executes any sql scripts to build the base db to the current version. Then I run all my unit test projects. Then I run integration tests, which, among other things, check my repository level to make sure the code still matches my end (I usually use ORM in my projects, so they rarely go out of sync ... but this is a good step in the process). After all the tests have passed (or failed), I roll back the database to a clean state and run the scripts to bring it to the current version (this is important because it provides the team with a clean database that will evolve against the click of a button). If the assembly was successful, I distribute the code to the development server (I also have one deployment of clicks on intermediate servers and production servers). If you want to mark your code base with every check, you can do it here.
Once all this is complete, I like to run some analysis of my code using NDepend , NDoc and NCover . NDepend is a code analysis tool to make sure everything in the architecture is correct, that the naming standards are what they should be, and TOTALLY MORE. NDoc retrieves all code comments and generates MSDN style documentation for my code. NCover tells me if I have proper unit test coverage for my code.
Then I have a custom Ant task that I wrote that analyzes all my code for various // TODO and // CodeDebt tags to generate another report, to tell me (usually at the end of the sprint) just how much crap is accumulating in my code base . This can then be taken into account in the next sprint.
All of these reports are either included in the email of the assembly, which is issued or linked too appropriately.
Keep in mind that all of the above happens for every check ... and without having to click at least one button! This is true continuous integration and should be the goal of every build wizard.
CruiseControl has a web console that also allows non-web developers (anyone really) to log in and execute this click without having to check the code ... caused by forcing the assembly.
Given this structure, you can also easily drop the click while everything is under version control. You will need another Ant script that will execute the same process, but with an additional first task is that it will have to get the latest version of the code, and not the latest to complete the build process. All Ant tasks can be reused for another purpose.