Centralization / control of arbitrary constructions of .NET projects and solutions

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.

+4
source share
1 answer

The biggest problem that I see in the central build system is that even with the best will in the world, tools will diverge between teams or over time.

I approve of designing any build system for a particular project so that it requires a single module check, for example. MyProjectBuildEnvironment, and then run a single script in a neutral tool mode, for example. on windows build.bat system

Whenever possible, all the tools used by the build environment should be run simply by checking the MyProjectBuildEnvironmen module, and not to install level installers.

These two restrictions will not impede the freedom of teams to use the tools that they currently prefer.

A central build system can be a simple system that checks one module per project and simply runs the build.bat file. You can call it a meta-assembly.

To be honest, this would probably be superfluous, since a simple wiki describing the name of the build module for each project would be enough for anyone to test this single module and drop it using the general build.bat command.

As a final note, the script to start the assembly should always check the environment and inform the user whether any tools are missing or whether any machine configuration should be configured to complete the assembly successfully.

+3
source

Source: https://habr.com/ru/post/1276621/


All Articles