2010-08-12 11 views
27

Gibt es eine API, die ich mit Cruise Control .NET (ccnet) verwenden kann, um den Server abzufragen, um beispielsweise den Status verschiedener Builds zu erhalten?Gibt es eine API für Cruise Control .NET?

Ich habe festgestellt, dass es einige Optionen in der Ccnet-Tray-Anwendung für die Verbindung gibt, aber ich kann keine Dokumentation der Service-API oder Beispiele finden, wie man es verbraucht.

Antwort

33

Es gibt sicherlich eine API, da die Tray-Anwendung es verwendet. Ich habe den Code zuvor von ihrem SVN-Repository heruntergeladen (HINWEIS: wie unten unter der URL, gehostet github.com), um einen Fehler zu beheben (die Art und Weise der "Letzte Build Time" Spalte funktioniert - die behoben wurde, aber regressiert in der Version 1.5), und das wäre wahrscheinlich ein guter Anfang.

Die Repository-URL lautet https://github.com/ccnet/CruiseControl.NET.

Ich habe gerade meine lokale Kopie aktualisiert und hatte einen Mooch durch und ein wahrscheinlicher Kandidat für das, was Sie wollen, ist die CruiseServerHttpClient Klasse im Remote Projekt. einen Verweis auf Thoughtworks.CruiseControl.Remote und NetReflector erstellen Anwendung

Mit der Remote Baugruppe den Status jedes Projekt zu erhalten/eine Build zwingen, die Quelle von git Kompilieren

  • eine neue Konsole
  • hinzufügen (beide befinden sich im Verzeichnis \ bin für das Projekt Remote)
  • Fügen Sie Ihrer Konsolenanwendung den folgenden Code hinzu

Console Anwendungscode:

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); 
      } 
     } 
    } 
} 

Für jedes Projekt, das Sie Ausgabe erhalten werden ähnlich wie:

Projektname - Erfolg

einen Build zu erzwingen, Sie‘ d den folgenden Anruf tätigen:

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

Unter der Haube dieses in einer HTTP-Anforderung dazu führt, gemacht, die besteht aus:

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
erwarten: 100-Continue

forcebuild = true & Projektname = PROJECT_NAME & -serverName = local

+0

Spot auf Antwort, die Cheeers !! :-) –

+0

Die Assemblies Thoughtworks.CruiseControl.Remote.dll und NetReflector.dll befinden sich ebenfalls im cctray-Programmverzeichnis. – John

+0

In Ihrem Beispiel Erzwingen eines Builds erfordert Computername und Benutzer. Ist das nur zum Loggen da es nicht per Post verschickt wird? –

7

Sie auch direkt über HTTP-Abfragen können über die Seite http://CC_SERVER_NAME/ccnet/XmlStatusReport.aspx geladen.Dies gibt ein XML-Dokument zurück, das den Status all Ihrer Build-Projekte angibt, so wie es auf der Seite http://CC_SERVER_NAME/ccnet/ViewFarmReport.aspx gerendert wird.

Es wäre schön, wenn Sie einen Einblick in die Geschichte eines Bauprojekts erhalten könnten - vielleicht können Sie das, ich habe es nicht versucht!

9

Fügen Sie Ihrem Projekt das Nuget-Paket CruiseControl.Net hinzu. http://www.nuget.org/packages/CruiseControl.Net/

Dies fügt die Referenzen zu ThoughtWorks.CruiseControl.Core, ThoughtWorks.CruiseControl.Remote und NetReflector zu Ihren Projekten hinzu und gibt Ihnen eine einfache Möglichkeit, diese auf dem neuesten Stand zu halten.

Verwandte Themen