Tip
Although this book covers CCNet,you should take a look at other available options and use the one
that feels most comfortable.These applications are being actively developed and you may find that one has
precisely the feature that you need as a result of its particular implementation.For example,I found the
cctrayapplication very handy during my initial exploration of CCNet.
CruiseControl.NET
As I write this book, CCNet has reached v0.7, which is a significant shift from the 0.6 version
Ioriginally began to use in earnest. I was led to CCNet directly from reading about CI on
Fowler’s web site. The CCNet site is shown in Figure 6-2.
Figure 6-2.CruiseControl.NET
CCNet presents a server component that can run as a console or Windows service. The
server is accessible through a remoting channel, and there are a number of ways to interact
with the server. There is a web site that maintains build information (reports, logs, etc.), which
was a major part of the application until v0.7, where it is gradually being deprecated. Instead,
it is being replaced with a “web dashboard” that can handle multiple projects and multiple
CCNet instances and is proving to be much more useful than individual sites. The dashboard
currently lacks some of the reporting functionality, but this is being addressed. There is also
CHAPTER 6 CONTINUOUS INTEGRATION
171
Pdf to jpg - Convert PDF to JPEG images in C#.net, ASP.NET MVC, WinForms, WPF project
How to convert PDF to JPEG using C#.NET PDF to JPEG conversion / converter library control SDK
change from pdf to jpg on; convert pdf into jpg
Pdf to jpg - VB.NET PDF Convert to Jpeg SDK: Convert PDF to JPEG images in vb.net, ASP.NET MVC, WinForms, WPF project
Online Tutorial for PDF to JPEG (JPG) Conversion in VB.NET Image Application
advanced pdf to jpg converter; bulk pdf to jpg converter
an application that sits in the system tray called cctraythat can access the server remotely in
order to trigger builds through a context menu, or you can simply be notified of a build when
one occurs through a message in the system tray. 
Draco.NET
Draco.NET is described on its site as being inspired by CruiseControl (the Java version of
CCNet) and so is an interesting counterpoint to CCNet. It consists of server and client parts,
with the emphasis for configuration on the client tools. It is less feature-rich than CCNet but
still performs the core functions of the CI process.
Hippo.NET
This application provides a different view of CI, in the form of a Windows GUI. Hippo tends to
look friendlier than the other applications because of this, and again provides all of the fea-
tures you need to operate a CI process. 
Note
Check out the Further Reading section at the end of this chapter for links to useful resources on
other CI applications.
Implementing CI for the Sample Applications
In this section, we will work with the existing sample applications and implement CI for them
using CCNet 0.8. We can then assess the applicability of CI and the ease with which the scripts
we have so far can be integrated into the process. To begin this work, let us look at CCNet in
more detail.
Examining CCNet
CCNet consists of several major parts that all have a role in presenting the full system for CI.
We will consider each of these in turn to become familiar with the system before attempting
the integration of the existing scripts.
Server
The server component handles all of the actual work of CCNet: the monitoring of the source
control repository, the running of the appropriate build scripts, and the management and
placement of the resulting information. The executable itself has a configuration file contain-
ing, for example, logging information. There is also a specific configuration file—the default is
calledccnet.config—to hold the information on a solution required by CCNet to operate suc-
cessfully. The main part of the work will be the recording of the information as required in this
XML file.
The server application can be run using a console harness or installed as a Windows serv-
ice. Ultimately the Windows service is probably the better option so that reboots are easier and
CHAPTER 6 ■ CONTINUOUS INTEGRATION
172
Online Convert Jpeg to PDF file. Best free online export Jpg image
Download Free Trial. Convert a JPG to PDF. Web Security. All your JPG and PDF files will be permanently erased from our servers after one hour.
convert multiple pdf to jpg; convert pdf pictures to jpg
Online Convert PDF to Jpeg images. Best free online PDF JPEG
Download Free Trial. Convert a PDF File to JPG. Web Security. Your PDF and JPG files will be deleted from our servers an hour after the conversion.
bulk pdf to jpg converter online; pdf to jpeg converter
so that no open window is required, among other reasons. However, this makes CCNet difficult
to work with initially and offers no specific advantage (other than those just mentioned) for
doing so. Running as a console application allows rapid feedback and quick restarts with a
visible output instead of relying on the log file—even though the log file is very good.
Caution
The mailing list for CCNet has various reports of problems with the Windows service that seem
to relate to access permissions and environment variables.Encountering these immediately deflects from
pplication in
the meantime.
Web Site
The web site component of CCNet was (before v0.7) the main visible aspect of CCNet. The
web site displays server logs, build logs, and other information pertaining to builds, such as
the time elapsed since the last build, and other reports such as unit tests, test coverage, and
syntactic analysis (FxCop) if included as part of the build process. The web site component
can be seen in Figure 6-3.
Figure 6-3.The CCNet web site application
CHAPTER 6 CONTINUOUS INTEGRATION
173
C# Image Convert: How to Convert Adobe PDF to Jpeg, Png, Bmp, &
String inputFilePath = @"C:\input.pdf"; String outputFilePath = @"C:\output.jpg"; // Convert PDF to jpg. C# sample code for PDF to jpg image conversion.
c# convert pdf to jpg; convert pdf to gif or jpg
C# Image Convert: How to Convert Tiff Image to Jpeg, Png, Bmp, &
RasterEdge.XDoc.PDF.dll. String inputFilePath = @"C:\input.tif"; String outputFilePath = @"C:\output.jpg"; // Convert tiff to jpg.
batch convert pdf to jpg; changing pdf to jpg file
Unfortunately, the web site only handles one project at a time (a projectin CCNet terms
generally equals a solution in VS .NET terms), or one build script. You can create a web site per
build script, but this is prohibitive and painful over many projects. 
Note
This annoMy
blog at http://bitarray.co.uk/marccontains information on these hacks for v0.6.1,but this has been
rendered rela
One useful aspect of the web site is the structure and formality that it provides to the
process-at-large, as we discussed when considering the benefits of CI.
As it stands, the web site is being deprecated as of v0.7 as more emphasis is placed on the
web dashboard to provide the information required, and this time for multiple projects.
Web Dashboard
Prior to v0.7 of CCNet, the web dashboard was relatively underused, and was implemented as
an aggregator of the myriad web sites required for working with multiple projects. As of v0.7, it
has become more of the focal point for all projects running under CI. The dashboard is shown
in Figure 6-4.
Figure 6-4.The CCNet web dashboard application
Configuring the dashboard and the server is much easier now. The dashboard not only
aggregates projects, but also aggregates CCNet instances across the same and different
machines, utilizing the remoting capabilities of CCNet fully.
CHAPTER 6 ■ CONTINUOUS INTEGRATION
174
JPEG to PDF Converter | Convert JPEG to PDF, Convert PDF to JPEG
similar software; Support a batch conversion of JPG to PDF with amazingly high speed; Get a compressed PDF file after conversion; Support
convert pdf pages to jpg; convert pdf document to jpg
JPG to JBIG2 Converter | Convert JPEG to JBIG2, Convert JBIG2 to
Image Converter Pro - JPEG to JBIG2 Converter. Convert JPEG (JPG) Images to, from JBIG2 Images on Windows.
convert pdf file to jpg format; change pdf to jpg online
As of CCNet 0.8, the dashboard has the same reporting capabilities as the web site had,
which means you can view reports such as those for NUnit and FxCop from the dashboard.
The other useful functionality of the dashboard is the ability to trigger a “force build”
directly from the dashboard. This is also a feature of cctraybut it is handy to have here as well. 
The cctray Application
This is a useful application for handling builds and feedback without the use of the web site
ordashboard. It sits in the system tray and can be connected to a single project on a CCNet
instance at once, though this is easily changed through the application settings. We will see
this done later in this chapter.
The main use of cctrayis to provide the ability to trigger a force build from a developer’s
desktop, but additionally it displays the previous build success in a simple way (red or green),
and provides notifications when a build is complete. This is useful for teams to stay in touch
with the current system status.
Basic Configuration
The first step to configuring CCNet is to obtain the application from the CCNet web site.
Onceyou unzip the contents of the application, you will see the available folders, as shown
inFigure 6-5.
Figure 6-5.The CCNet applications
Tip
Appendix A gives more information on obtaining the code and source for CCNet and a suggested
method for deployment.Additionally,you should always refer to the online documentation to glean the most
recent information on the application.
We will be using the web dashboard rather than the web site application, though we will
take a quick look at the web application. Both of these should be configured as virtual directo-
ries on your machine. In this case, I have configured webdashboardas the ccnetvirtual
directory, as shown in Figure 6-6.
CHAPTER 6 CONTINUOUS INTEGRATION
175
JPG to GIF Converter | Convert JPEG to GIF, Convert GIF to JPG
Converter. Convert JPEG (JPG) Images to, from GIF Images on Windows. JPEG to GIF Converter can directly convert GIF files to JPG files.
reader convert pdf to jpg; convert .pdf to .jpg
JPG to DICOM Converter | Convert JPEG to DICOM, Convert DICOM to
Image Converter Pro - JPEG to DICOM Converter. Convert JPEG (JPG) Images to, from DICOM Images on Windows.
change pdf to jpg image; best convert pdf to jpg
Figure 6-6.Setting up the dashboard in IIS
At this point, the dashboard will look as shown in Figure 6-7. It reports an error because it
is unable to find the CCNet server application. Addressing that is the next step.
Figure 6-7.Dashboard error screen
CHAPTER 6 ■ CONTINUOUS INTEGRATION
176
Configuring the Server
The server is configured with an XML file (by default called ccnet.config), as you might expect.
The most up-to-date information on configuration options will always be available on the
CCNet documentation web site, but it will look something like the skeleton shown here in
terms of the top-level elements for a project. There can be multiple project elements in
theccnet.configfile—the root element being <cruisecontrol>. The root element to the
ccnet.configfile encapsulates one standard child element, the projectelement, which can
appear multiple times. A projectelement describes all the information necessary to provide
CI for a system or subsystem.
<project>
<!-- General Settings -->
<name>Project 1</name>
<webURL>http://localhost/ccnet/Project1</webURL>
<workingDirectory>yourWorkingDirectory</workingDirectory>
<artifactDirectory>yourArtifactDirectory</artifactDirectory>
<modificationDelaySeconds>2</modificationDelaySeconds>
<triggers>
<yourFirstTriggerType ../>
<yourOtherTriggerType ../>
</triggers>
<sourcecontrol type="yourSourceControlType" ../>
<build type="yourBuildType" ../>
<labeller type="yourLabellerType" ../>
<tasks>
<yourFirstTaskType ../>
<yourOtherTaskType ../>
</tasks>
<publishers>
<yourFirstPublisherType ../>
<yourOtherPublisherType ../>
</publishers>
</project>
We will consider the areas marked in bold individually.
CHAPTER 6 CONTINUOUS INTEGRATION
177
General Settings
As we mentioned earlier, the root element to the ccnet.configfile encapsulates one standard
child element, the projectelement, which can appear multiple times. A projectelement
describes all of the information necessary to provide CI for a system or subsystem:
<project name="Etomic.Library.Transformer">
The project name is important since it will appear when you are using the web dash-
board, web site, and cctray.
<webURL>http://localhost/ccnet/Controller.aspx?_action_ViewProjectReport=true➥
&amp;server=local&amp;project=Etomic.Library.Transformer</webURL>
ThewebURLelement provides information to be used in the web dashboard for linking to
reports and so on. At the time of writing this feature is under development, but works to a cer-
tain extent, as we will see later. The URL is always standard, apart from the server location and
the project name.
<artifactDirectory>
D:\dotNetDelivery\BuildAreaCI\Publish\Etomic.Library.Transformer\
</artifactDirectory>
TheartifactDirectoryelement points to an area where artifacts generated during the
build can be stored. Here I have pointed the artifactDirectoryelement to the publishing
area for the project. There is another element, workingDirectory, that should be set in a simi-
lar way. The intention seems to be to link to the output or source directory for the project, but
this is also linked to in the sourcecontrolblock for VSS. Omitting the workingDirectoryele-
ment means that a folder will be created as a child relative to the location of the ccnet.config
file named the same as the project and then with its own child called WorkingDirectory.
<modificationDelaySeconds>10</modificationDelaySeconds>
This element ensures that commits that have occurred less than 10 seconds before the
CCNet run are ignored, circumventing any issues with nonatomic commits into source con-
trol databases.
Triggers
As we discussed at the beginning of the chapter, the big difference between an automated
build and CI is the differing trigger for the build. CI works because it ensures integration as
soon as changes are committed to the source control system. 
<triggers>
<intervalTrigger />
</triggers>    
CCNet has a number of different triggers, as shown in Table 6-1.
CHAPTER 6 ■ CONTINUOUS INTEGRATION
178
Table 6-1.CCNet Trigger Options
Type
Behavior
intervalTrigger
Polls the source control database every so often (optional) and performs a
build if changes are detected. This is the trueCI function.
scheduleTrigger
Specifies that an integration cycle should occur at a certain time on a
specified day.
filterTrigger
Allows the prevention of an integration cycle by decorating one of the other
triggers with a time and day when the integration should not occur.
A project can have multiple triggers assigned to it so that, for example, you can mix the
intervalTriggerfunction with a scheduleTrigger. There are a couple of issues, though: it is
hard to tell which trigger performed the latest action and therefore difficult to represent differ-
ent build behaviors for each in NAnt, such as publishing the nightly build differently. It is not
possible to explicitly state a differing build or labeling strategy in the ccnet.configfile either,
as the elements making up the project are not structured in such a way.
I have chosen to use the trueCI method of intervalTriggerbut you may find that you
prefer to always force a build—particularly if you are just beginning to implement CI into
yourteam.
Source Control
Thesourcecontrolelement is similar to the VSS tasks we used from NAntContrib to perform
the builds outside of CCNet. It is quite straightforward to complete the details:
<sourcecontrol type="vss" autoGetSource="true">
<ssdir>"D:\dotNetDelivery\VSS"</ssdir>
<project>$/Solutions/Etomic.Library.Transformer/</project>
<username>builder</username>
<password>builder</password>
<workingDirectory>
D:\dotNetDelivery\BuildAreaCI\Source\Etomic.Library.Transformer
</workingDirectory>
</sourcecontrol>
Notice the workingDirectory(which is not the same as the project workingDirectory):
Ihave swapped the format from <project>\source to source\<project>and will need to
reflect this in the NAnt files later on to keep various artifacts together across all projects. We
can see why later.
Also, there is an attribute called applyLabelthat sits in the sourcecontrolelement.
Because we did not include it, CCNet does not apply a label itself. For the time being, and
perhaps always, I would prefer to control the labeling to VSS from the NAnt scripts as we
havedone previously. This is because I would like to be able to specify explicitly when
labelingshould be performed.
CHAPTER 6 CONTINUOUS INTEGRATION
179
CCNet supports a variety of source control databases. Here we are using VSS but we
couldbe using CVS, SourceGear, StarTeam, and so on. Also of interest is the availability of a
filesystemsource control type, which can be used to monitor changes and trigger builds,
based on the changes to a folder. The syntax for this element is as follows:
<sourcecontrol type="filesystem">
<repositoryRoot>c:\mycode</repositoryRoot>
</sourcecontrol>
This is useful since it means that, for example, shared assemblies can be monitored for
change and then a build performed on dependent systems when a change occurs. The most
appropriate use of the filesystemsource control type is for wrapping up the VSS settings and
the filesystem settings under a multisource control type, as in the following example:
<sourcecontrol type="multi">
<sourceControls>
<vss autoGetSource="true">
<ssdir>"D:\dotNetDelivery\VSS"</ssdir>
<project>$/Solutions/Etomic.Transformer.Win/</project>
<username>builder</username>
<password>builder</password>
<workingDirectory>
D:\dotNetDelivery\BuildAreaCI\Source\Etomic.Transformer.Win
</workingDirectory>
</vss>
<filesystem>
<repositoryRoot>
D:\dotNetDelivery\Assemblies\Etomic.Library.Transformer
</repositoryRoot>
</filesystem>
</sourceControls>
</sourcecontrol>
In this example for the Windows application, I have included a VSS database for perform-
ing regular builds on source changes, but I have also included a filesystemsource control
type pointing at the Assembliesfolder where the shared library component is positioned. The
result is that when a delivery of the shared component is made (not just a build but a deploy
as well), CCNet will detect the change to the folder and trigger a build of the Windows applica-
tion. This is, once again, in the spirit of true CI, but may not be a desired behavior for your
team or environment. We will see how this performs later on.
Build
Once all of the source has been grabbed according to the appropriate triggers and other crite-
ria, the main instruction for CCNet is to perform the build. In the following example, we can
see that the nested elements are fairly obvious calls to the NAnt scripts we have previously
produced. We can also see that we can pass through command-line parameters into NAnt that
enable us to leverage the flexibility of scripts in the way that has proved useful in previous
refactoring efforts.
CHAPTER 6 ■ CONTINUOUS INTEGRATION
180
Documents you may be interested
Documents you may be interested