Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Is there an API for Cruise Control .NET? [closed]

Is there an API I can use with Cruise Control .NET (ccnet) to query the server, for example to get the status of various builds?

I have noticed that there are a few options in the ccnet tray application for connecting but I cannot find any documentation of the service API or examples of how to consume it.

like image 918
REA_ANDREW Avatar asked Aug 12 '10 12:08

REA_ANDREW


3 Answers

There's certainly an API as the Tray application uses it. I've downloaded the code from their SVN repository previously (NOTE: as per the URL below, it's now hosted on github.com) to fix a bug (the way the "Last Build Time" column works - which was fixed, but regressed in the 1.5 release), and that'd probably be a good place to start.

The repository url is https://github.com/ccnet/CruiseControl.NET.

I've just updated my local copy and had a mooch through and a likely candidate for what you want is the CruiseServerHttpClient class in the Remote project.

Using the Remote assembly to obtain the status of each project / force a build

  • Compile the source from git
  • Create a new console application
  • Add a reference to Thoughtworks.CruiseControl.Remote and NetReflector (both will be in the \bin directory for the Remote project)
  • Add the following code to your console application

Console application code:

using System;
using ThoughtWorks.CruiseControl.Core;
using ThoughtWorks.CruiseControl.Remote;
using ThoughtWorks.CruiseControl.Remote.Messages;

namespace CruiseControlInterface
{
    class Program
    {
        static void Main(string[] args)
        {
            var ipAddressOrHostNameOfCCServer = ""; // Complete this value
            var client = new CruiseServerHttpClient(
                string.Format("http://{0}/ccnet/",ipAddressOrHostNameOfCCServer));

            foreach (var projectStatus in client.GetProjectStatus())
            {
                Console.WriteLine("{0} - {1}", projectStatus.Name, projectStatus.BuildStatus);
            }
        }
    }
}

For each project you'll get output similar to:

ProjectName - Success

To force a build, you'd make the following call:

client.Request("PROJECT_NAME", new IntegrationRequest(BuildCondition.ForceBuild, "YOUR_MACHINE_NAME", "YOUR_USER_NAME"));

Under the hood this results in a HTTP request being made that consists of:

POST http://CC_SERVER_NAME/ccnet/ViewFarmReport.aspx HTTP/1.1
Content-Type: application/x-www-form-urlencoded
Host: 192.168.100.180
Content-Length: 64
Expect: 100-continue

ForceBuild=true&projectName=PROJECT_NAME&serverName=local

like image 169
Rob Avatar answered Nov 02 '22 08:11

Rob


Add the Nuget package CruiseControl.Net to your project. http://www.nuget.org/packages/CruiseControl.Net/

This will add the references to ThoughtWorks.CruiseControl.Core, ThoughtWorks.CruiseControl.Remote and NetReflector to your project(s) and give you an easy way to keep it up to date.

like image 10
Larry Dukek Avatar answered Nov 02 '22 08:11

Larry Dukek


You can also query directly over HTTP, by loading the page http://CC_SERVER_NAME/ccnet/XmlStatusReport.aspx. This will return an XML document giving the statuses of all your build projects, as is rendered on the page http://CC_SERVER_NAME/ccnet/ViewFarmReport.aspx.

It would be nice if you could drill down into that to get at a build project's history - maybe you can, I haven't tried!

like image 8
David Keaveny Avatar answered Nov 02 '22 06:11

David Keaveny