Hello everybody!
First of all, big thanks for the developers and the community who made
CCNet to become what it is. Excellent job. However, there are some
question that arose while implementing CI by means of CCNet in my
department.

Well, I have the Version 1.4.0.3524 up and running in conjunction with
subversion; well, I reverted to this version because the latest
release crashed my SVN (the 'unable to load the output from svn'
thing); we are using the <devenv> task to spawn our VS2008 solutions,
that contain among other projects a googletest test project that
compiles to an executable that is spawned after the <devenv> task with
the <exec> task. The test outputs its log to a result file in a JUnit/
NUnit compliant fashion. A <merge> tasks merges these results so that
it should be displayed by the dashboard (see question two). To the
biggest extend, I am confronted with setting up CI for unmanaged C++
projects that are splitted up into projects and libraries like that
(hypothetical svn trunk structure that is not too far away from
reality ;-) ):
svn/trunk/
   + projects
          + P1
          + P2
          + P3
          ...
          + P4
   + libraries (own stuff)
          + L1
          + L2
          ...
          + Ln

A typical sceneario of inter-lib/project dependencies is like this (->
means 'requires' or 'depends on'):
P1 -> P3 -> L3 +-> L1
|          |           +->  L2
|         +-> L1
|         +-> L2
+-> L6 -> L9
       +-> L2
+-> L3

P2 -> ...

Pn -> ...

Okay, here they go, the questions I have:
1) First of all; how do I have to model all these dependencies without
having a broken integration due to concurrent modifications/builds of
dependent libs. Well, I read about serialized builds in (http://
confluence.public.thoughtworks.org/display/CCNET/Integration+Queues).
Due to that I have currently one big serialized build in one queue
comprising of all the projects and libraries with priorities according
to the link above. For this, I simply converted the lib/project
structure to a DAG and performed a topological sorting. Well, this
should work, but it's no surprise that this won't scale pretty good,
right?

2) For unit-testing, we use the googletest testing lib that allows
outputting the logs of the tests to a xml file in a JUnit / NUnit
compatible fashion. Well, this works well in that sense, that the
tests are executed (calling the <exec> task) and dashboard notifies
that the tests are passed or failed. However, I do not get any
information from the build's test in the NUnit details area. Actually,
do I have to expect some? I think, as long as the googletest
executable exposes its information in JUnit/NUnit style, this
information will be reused in the NUnit details area. Am I wrong?
Likewise, the 'View Statistics' area does not provide any information
on how much of the tests failed or passed (neither in the 'Detailed
Data' tab nor in the 'Summarized Data' tab).

3) Sometimes I'am wondering, if I am the only one who is concerned
with CCNet, testing unmanaged C++ code and getting Code Coverage
information for the tests. Unfortunately, NCover, NDepends and finally
NUnit won't work because we are in a plain unmanaged C++ environment.
Are there any alternatives or is there anybody out there who can give
me a hint (or a small example) on how to implement CI under these
circumstances?

4) And last but not least; are there nicely designed xslt available
that pimp my dashboard? Would be nice (and great) if there is (or
would be) something like a repository where you have some screenshots
of a customized dashboard along with the xslts provided.

Thanks a lot for your patience and greets,
 Ruppsn

Reply via email to