2010-08-12 29 views
27

Existe-t-il une API que je peux utiliser avec Cruise Control .NET (ccnet) pour interroger le serveur, par exemple pour connaître le statut de différentes versions?Existe-t-il une API pour Cruise Control .NET?

J'ai noté qu'il y a quelques options dans l'application de plateau de ccnet pour la connexion mais je ne peux trouver aucune documentation de l'API de service ou des exemples de la façon de la consommer.

Répondre

33

Il existe certainement une API car l'application Tray l'utilise. J'ai téléchargé le code de leur dépôt SVN précédemment (NOTE: selon l'URL ci-dessous, il est maintenant hébergé sur github.com) pour corriger un bug (la façon dont la colonne "Last Build Time" fonctionne - qui a été corrigée, mais a régressé dans la version 1.5), et ce serait probablement un bon point de départ. L'URL du référentiel est https://github.com/ccnet/CruiseControl.NET.

Je viens de mettre à jour ma copie locale et j'ai eu un peu de chemin à travers et un candidat probable pour ce que vous voulez est la classe CruiseServerHttpClient dans le projet Remote.

En utilisant l'ensemble Remote pour obtenir le statut de chaque projet/forcer une construction

  • compiler la source de git
  • Créer une nouvelle application console
  • Ajouter une référence à Thoughtworks.CruiseControl.Remote et NetReflector (les deux seront dans le répertoire \ bin pour le projet Remote)
  • Ajoutez le code suivant à votre application de console

code d'application Console:

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

Pour chaque projet, vous obtiendrez une sortie similaire à:

ProjectName - Succès

Pour forcer une construction, vous d appelez:

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

Sous le capot il en résulte une requête HTTP étant fait qui se compose de:

POST http://CC_SERVER_NAME/ccnet/ViewFarmReport.aspx HTTP/1.1
Content-Type: application/x-www-form-urlencoded
Hôte: 192.168 .100.180
Content-Length: 64
Expect: 100-continue

ForceBuild = true & projectName = PROJECT_NAME & serverName = local

+0

Spot sur la réponse qui chérit !! :-) –

+0

Les assemblées Thoughtworks.CruiseControl.Remote.dll et NetReflector.dll se trouvent également dans le répertoire des fichiers du programme cctray. – John

+0

Dans votre exemple Forcer une construction nécessite le nom et l'utilisateur de la machine. Est-ce juste pour la journalisation, car il n'est pas envoyé par la poste? –

7

Vous pouvez également interroger directement sur HTTP, en chargeant la page http://CC_SERVER_NAME/ccnet/XmlStatusReport.aspx.Cela renverra un document XML donnant les statuts de tous vos projets de construction, comme cela est rendu sur la page http://CC_SERVER_NAME/ccnet/ViewFarmReport.aspx.

Ce serait bien si vous pouviez approfondir cela pour connaître l'histoire d'un projet de construction - peut-être que vous pouvez, je n'ai pas essayé!

9

Ajoutez le paquet Nuget CruiseControl.Net à votre projet. Ceci ajoutera les références à ThoughtWorks.CruiseControl.Core, ThoughtWorks.CruiseControl.Remote et NetReflector à votre projet (s) et vous donnera un moyen facile de le garder à jour.