Over the years, I created and tweaked a set of NAnt scripts to complete complete projects. The main script takes the endpoint of one application (for example, a web application project) and performs a complete assembly from the source control. The scripts are preconfigured with the necessary information about assembly locations, source control addresses, etc. The main thing is that you can submit very little information and build this project from scratch. This satisfies the “arbitrary” part of my question.
In the past, I worked for companies that released several software products (mainly web applications). This environment is very well suited for typical continuous integration, where there is an integrator for each product. I installed integrators to serve as both CI builders and integrators to handle the full candidate build and QA deployment. These integrators use master build scripts, so integrators themselves are a little more than source control control and calling the NAnt script wizard.
Now I am working on a development team that creates many applications. Often, developers are called upon to support applications originally created by others. When I started, there was no construction management. I occupy a special position in the group as the lead developer of a team of 4 people for one product package of a business unit (about half a dozen complete systems). I applied CruiseControl.Net with the main build scripts to run both CI assemblies and RC builds. This allows you to find a fixed set of projects in a business package.
I have been using CCNet for many years, so I fully understand what it can do. I greatly respect his contribution to the arena of continuous integration, as I use it for all projects in my product suite. I emphasized to my team the use of an official RC build integrator as a master builder for anything designed for any location other than development. This provides excellent control over a fixed set of projects controlled by CCNet.
However, there are other developers creating other applications. Some of them are one developer project, which is often not even controlled by the source code until it is implemented in the project life cycle (I'm trying to change something else). Many of these projects are one-time projects that will not have much vitality after their deployment. Despite this, they will still need to be supported. The integral in support of these factors is that without a centralized management of the construction of these projects, a candidate for the release versions, which will switch to QA, and, ultimately, the production must be performed on separate development machines. This, of course, provides zero assurance that everything is in source control, among other factors of the developer's build.
The problem I'm trying to solve is this: which system can I use to provide centralized management of these arbitrary assemblies? This is definitely not a unique issue. However, in most cases that I read about centralized assemblies, build automation and continuous integration, the main focus is on fixed projects / products and the tasks of supporting their further development. What types of processes are used by businesses that are constantly developing new projects? Don't they use these types of processes?
While master build scripts run on the build server, they are inconvenient to use. I would also prefer to restrict console access to the build server. Therefore, to manage the provider, a simpler management system is required to free arbitrary assemblies in the central system.
I understand that what I'm looking for may lie under the covers of MS Team Build. Unfortunately, whenever I start reading about it, I get this quick sensation when I start to penetrate the MS marketing material and quickly lose my way, never knowing that what I want to do can be done with it. In addition, licensing costs were seen as a probable traffic jam in some past general discussions on Team Foundation Server and Team System.
I really want to hear from everyone who solved this problem, which could offer suggestions. I did some work on a centralized build system based on my build-any-project build scripts. However, what I have is in its infancy and was built to support, mainly, only those projects that I am working on. At the moment, there is not enough support to handle many types of applications or the many configurations of projects and solutions that are possible using Visual Studio.