2010-08-12 9 views
27

C'è un'API che posso utilizzare con Cruise Control .NET (ccnet) per interrogare il server, ad esempio per ottenere lo stato di varie build?Esiste un'API per Cruise Control .NET?

Ho notato che ci sono alcune opzioni nell'applicazione del ccnet tray per la connessione ma non riesco a trovare alcuna documentazione dell'API del servizio o esempi di come consumarlo.

risposta

33

Esiste certamente un'API come l'applicazione Tray utilizza. Ho scaricato il codice dal suo repository SVN in precedenza (NOTA: come per l'URL qui sotto, ora è ospitato su github.com) per correggere un bug (il modo in cui funziona la colonna "Last Build Time" - che è stata riparata, ma regredita nella versione 1.5), e probabilmente sarebbe un buon punto di partenza.

L'URL del repository è https://github.com/ccnet/CruiseControl.NET.

Ho appena aggiornato la mia copia locale e ho avuto un passaggio e un probabile candidato per quello che desideri è la classe CruiseServerHttpClient nel progetto Remote.

Utilizzando l'assemblea Remote per ottenere lo stato di ogni progetto/forzare un accumulo

  • Compilare il sorgente da Git
  • Creare una nuova applicazione console
  • Aggiungere un riferimento alla Thoughtworks.CruiseControl.Remote e NetReflector (entrambi saranno nella directory \ bin per il progetto Remote)
  • Aggiungere il seguente codice all'applicazione console

Console codice dell'applicazione:

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

Per ogni progetto si otterrà un output simile a:

ProjectName - Successo

per forzare un accumulo, è' d effettuare la seguente chiamata:

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

Sotto il cofano questo si traduce in una richiesta HTTP stato fatto che consiste di:

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-continuano

ForceBuild = true & projectName = PROJECT_NAME & serverName = locale

+0

Spot on answer that cheeers !! :-) –

+0

Gli assembly Thoughtworks.CruiseControl.Remote.dll e NetReflector.dll si trovano anche nella directory dei file del programma cctray. – John

+0

Nel tuo esempio Forzare una build richiede il nome e l'utente del computer. È solo per la registrazione poiché non viene inviato nel post? –

7

È inoltre possibile eseguire una query direttamente su HTTP, per il caricamento della pagina http://CC_SERVER_NAME/ccnet/XmlStatusReport.aspx.Ciò restituirà un documento XML che fornisce gli stati di tutti i tuoi progetti di costruzione, come viene visualizzato nella pagina http://CC_SERVER_NAME/ccnet/ViewFarmReport.aspx.

Sarebbe bello se potessi approfondire la storia di un progetto di costruzione - forse puoi, non ho provato!

9

Aggiungi il pacchetto Nuget CruiseControl.Net al tuo progetto. http://www.nuget.org/packages/CruiseControl.Net/

Questo aggiungerà i riferimenti a ThoughtWorks.CruiseControl.Core, ThoughtWorks.CruiseControl.Remote e NetReflector ai tuoi progetti e ti fornirà un modo semplice per tenerlo aggiornato.

Problemi correlati