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

北慕城南 提交于 2019-11-29 22:18:09

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

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.

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!

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!