Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

CruiseControl "Unused node detected" error when adding xmlns to Project node

I am trying to use the Cruise Control preprocessor functionality to break my configuration into smaller reusable sections. I can use the include feature great from within the root cruisecontrol node, like so:

<cruisecontrol xmlns:cb="urn:ccnet.config.builder">
    <cb:include href="child.config" />
</cruisecontrol>

If I try and use another include within the child config (like so):

<project name="TestProject" xmlns:cb="urn:ccnet.config.builder">    
    <cb:include href="grandchild.config" />
</project>

I get the following error:

ThoughtWorks.CruiseControl.Core.Config.ConfigurationException: Unused node detected: xmlns:cb="urn:ccnet.config.builder"

If I remove the xmlns namespace statement, I get this error instead:

ThoughtWorks.CruiseControl.Core.Config.ConfigurationException: The configuration file contains invalid xml: E:\Build\Config\AppRiver.Tools.BuildAutomation\CruiseControl\ccnet.config ---> System.Xml.XmlException: 'cb' is an undeclared namespace.

And lastly, if I remove the "cb" prefix on the tag, I get this error

Unused node detected:     Unused node detected: <define buildFile="CP.WEB.Dev.SanityCheck.CI.build" />

I am out of ideas - any help appreciated!

like image 944
James Avatar asked Jul 14 '11 19:07

James


3 Answers

To use <cb:include> the <cb:include> tag must have the xml namespace defined AND the included files must start with a element with the xml namespace defined in it. This is in the documentation but is easy to miss.

<cruisecontrol xmlns:cb="urn:ccnet.config.builder">
  <cb:include href="projectFile.xml" xmlns:cb="urn:ccnet.config.builder"/>
</cruisecontrol>

projectFile.xml

<cb:config-template xmlns:cb="urn:ccnet.config.builder">
  <project>
      ...
  </project>
</cb:config-template>

Additionally, if you're adding ccnet version information as noted here, you need to include that namespace in the included file as well.

So the ccnet.config looks like:

<cruisecontrol xmlns:cb="urn:ccnet.config.builder" xmlns="http://thoughtworks.org/ccnet/1/8">
  <cb:include href="projectFile.xml" xmlns:cb="urn:ccnet.config.builder"/>
</cruisecontrol>

and projectFile.xml changes to

<cb:config-template xmlns:cb="urn:ccnet.config.builder" xmlns="http://thoughtworks.org/ccnet/1/8">
  <project>
      ...
  </project>
</cb:config-template>
like image 177
Greg Gorman Avatar answered Oct 15 '22 10:10

Greg Gorman


This isn't necessarily a problem with the way you are including a file. It is a more generic error. I ran into the problem when accidentally missing a tag out in a source control statement.

I think it is used to mean the xml you inserted wasn't understood by the element you tried to use it in

I accidentally had this (which works for multi source control):

<cb:define name="Hg">
    <repo>$(repo)</repo>
    <executable>$(hgExePath)</executable>
    <branch>default</branch>
    <workingDirectory>$(dir)</workingDirectory>
</cb:define>

Being used in something like this:

<cb:define name="SourceControl">
    <sourcecontrol type="hg">
        <cb:Hg repo="$(repo)" dir="." />
    </sourcecontrol>
</cb:define>

Because sourcecontrol (the native ccnet one) was already specifying type="hg" it wasn't expecting to see the hg element

like image 2
JonnyRaa Avatar answered Oct 15 '22 11:10

JonnyRaa


Try removing the included grandchild from within the Project tags. Also, we include xmlns:cb="urn:ccnet.config.builder" in our Include tag.

<cb:include href="grandchild.config" xmlns:cb="urn:ccnet.config.builder"/>
like image 1
NoAlias Avatar answered Oct 15 '22 10:10

NoAlias