To get a trial key
fill out the form below
Team License (a basic version)
Enterprise License (extended version)
* By clicking this button you agree to our Privacy Policy statement

Request our prices
New License
License Renewal
--Select currency--
* By clicking this button you agree to our Privacy Policy statement

Free PVS-Studio license for Microsoft MVP specialists
* By clicking this button you agree to our Privacy Policy statement

To get the licence for your open-source project, please fill out this form
* By clicking this button you agree to our Privacy Policy statement

I am interested to try it on the platforms:
* By clicking this button you agree to our Privacy Policy statement

Message submitted.

Your message has been sent. We will email you at

If you haven't received our response, please do the following:
check your Spam/Junk folder and click the "Not Spam" button for our message.
This way, you won't miss messages from our team in the future.

CruiseControl.NET - build automation pl…

CruiseControl.NET - build automation platform

Feb 26 2010

While developing software products with a complicated structure, you come at some moment to the necessity of automating the processes of building and integrating the projects and distribution kits being developed. Continuous integration is the practice of software development that implies frequent (up to several times during the day) automatic build and testing of the current product version. This approach enables you to reduce the labor intensiveness of the integration as such and detect its defects and conflicts at the very early stages. Note that this methodology implies using a version control system (for example, CVSNT and Subversion) to store the source codes and all the other components needed to build and test the project.

Earlier, when we were developing the static code analyzer PVS-Studio to search for 64-bit and parallel errors, we solved this task with the help of script files of Windows command line. Although this technique seems to be the simplest and require no specialized tools, using it inevitably involves some issues:

  • it is difficult to constantly update the scripts;
  • there are some difficulties occurring when scripts are ported to another machine and used by other developers;
  • it is difficult to add new build processes into the existing scripts;

To solve these problems we decided to use a specialized platform to provide continuous integration - CruiseControl.NET. The build system was to be able to fulfill the following tasks:

  • Perform full build and installation of the main project;
  • Build, install and test the project;
  • Build auxiliary projects;
  • Create backup copies of the project's site and the version control system repository.
  • Launch all the commands according to schedule and be able to build the project on demand.

CruiseControl.NET integration server

CruiseControl.NET is a package of applications the most important of which is the automatic integration server. While watching the version control system the CruiseControl.NET server can detect changes in the repository and automatically launch the integration build of the project to verify these changes. The local version of the system repository will be adjusted in accordance with the latest revision of the version control system, that is, all the files that have been changed since the last successful build will be updated. Besides, CruiseControl.NET has a powerful system of triggers (a set of conditions fulfillment of which initiates the integration server to start building the project) you may manage the time of starting the build with:

  • interval trigger
  • time and day of week filter
  • when build of another project is over
  • according to schedule
  • when the page by a specified URL changes

When the build is over, the system server will inform the developer about its results and publish them. Of course, you may start building any project manually. Usually the integration server is located on a special separate computer whose configuration fits the environment where a project will be arranged to the maximum degree. The result of only this kind of build may be considered final.

Below is a layout of continuous integration system server arrangement:


You may manage the build server through a special configuration XML file. It has the name ccnet.config by default and is situated in the same folder as the server is. At the highest level of this file are queues of integration and projects of integration while all the other settings are described at the sublevels of separate projects. There may be a lot of projects and they may or may not be allowed to build simultaneously and depending on each other - this is determined by how they are arranged in the integration queues. Several queues may be built simultaneously while the projects inside them only sequentially.

Each project is a set of various integration tasks, triggers to launch it and a block that defines the parameters of interaction between the server and the version control system. Each of these blocks is described at the corresponding project sublevels. The tasks themselves are split into 3 blocks: preceding the build, involved into the build as such and following the build. These tasks are separate actions (such as executing a command in the command line, running tests or publishing the build results) that compose the process of project integration. CruiseControl.NET provides you with many different methods to build a project:

  • executing a command in Windows command line
  • using MSBuild projects
  • build from Visual Studio solution-file
  • using NAnt - a free software product to automate the building process

The build of a separate project is considered successful only if all the tasks of the second (building) block are fulfilled. CruiseControl.NET provides you also with a large number of result publication methods:

  • Web Dashboard - a web-application for IIS;
  • mail delivery in various modes;
  • copying files from one folder to another;
  • including XML logs of third-party programs into native logs;
  • launching the build process on another server;
  • creating an XML file with changes between the builds;
  • build statistics gathering;

In addition to the automation server, the package CruiseControl.NET provides you with the tools CCTray and Web Dashboard. CCTray is a Windows utility that rests in the notification area and shows the build status on a remote server. With its help you may watch the status of several builds on different servers simultaneously and make any server start building. Web Dashboard is a web-application for IIS server. It serves to display the build data through the web-interface. With its help you may display the data from different servers.

The benefit of introducing such a system is evident. First of all it provides smooth integration of the whole project. Integration of different modules and revisions made by different programmers goes automatically and if something goes wrong you immediately learn about it. Moreover, continuous integration is useful not only when monitoring the development process at the current moment but when analyzing the tendencies as well. But we should note that the process of automatic integration also requires constant adjustment in correspondence with the changes introduced into the projects being built.

Popular related articles
Technologies used in the PVS-Studio code analyzer for finding bugs and potential vulnerabilities

Date: Nov 21 2018

Author: Andrey Karpov

A brief description of technologies used in the PVS-Studio tool, which let us effectively detect a large number of error patterns and potential vulnerabilities. The article describes the implementati…
The Ultimate Question of Programming, Refactoring, and Everything

Date: Apr 14 2016

Author: Andrey Karpov

Yes, you've guessed correctly - the answer is "42". In this article you will find 42 recommendations about coding in C++ that can help a programmer avoid a lot of errors, save time and effort. The au…
The Evil within the Comparison Functions

Date: May 19 2017

Author: Andrey Karpov

Perhaps, readers remember my article titled "Last line effect". It describes a pattern I've once noticed: in most cases programmers make an error in the last line of similar text blocks. Now I want t…
Appreciate Static Code Analysis!

Date: Oct 16 2017

Author: Andrey Karpov

I am really astonished by the capabilities of static code analysis even though I am one of the developers of PVS-Studio analyzer myself. The tool surprised me the other day as it turned out to be sma…
Free PVS-Studio for those who develops open source projects

Date: Dec 22 2018

Author: Andrey Karpov

On the New 2019 year's eve, a PVS-Studio team decided to make a nice gift for all contributors of open-source projects hosted on GitHub, GitLab or Bitbucket. They are given free usage of PVS-Studio s…
Static analysis as part of the development process in Unreal Engine

Date: Jun 27 2017

Author: Andrey Karpov

Unreal Engine continues to develop as new code is added and previously written code is changed. What is the inevitable consequence of ongoing development in a project? The emergence of new bugs in th…
The way static analyzers fight against false positives, and why they do it

Date: Mar 20 2017

Author: Andrey Karpov

In my previous article I wrote that I don't like the approach of evaluating the efficiency of static analyzers with the help of synthetic tests. In that article, I give the example of a code fragment…
PVS-Studio for Java

Date: Jan 17 2019

Author: Andrey Karpov

In the seventh version of the PVS-Studio static analyzer, we added support of the Java language. It's time for a brief story of how we've started making support of the Java language, how far we've co…
PVS-Studio ROI

Date: Jan 30 2019

Author: Andrey Karpov

Occasionally, we're asked a question, what monetary value the company will receive from using PVS-Studio. We decided to draw up a response in the form of an article and provide tables, which will sho…
The Last Line Effect

Date: May 31 2014

Author: Andrey Karpov

I have studied many errors caused by the use of the Copy-Paste method, and can assure you that programmers most often tend to make mistakes in the last fragment of a homogeneous code block. I have ne…

Comments (0)

Next comments
This website uses cookies and other technology to provide you a more personalized experience. By continuing the view of our web-pages you accept the terms of using these files. If you don't want your personal data to be processed, please, leave this site.
Learn More →