2010-08-12 15 views
27

¿Existe una API que pueda usar con Cruise Control .NET (ccnet) para consultar el servidor, por ejemplo, para obtener el estado de varias compilaciones?¿Hay una API para Cruise Control .NET?

He notado que hay algunas opciones en la aplicación ccnet tray para conectar pero no puedo encontrar ninguna documentación del servicio API o ejemplos de cómo consumirlo.

Respuesta

33

Ciertamente hay una API, ya que la aplicación Tray lo usa. He descargado el código de su repositorio SVN anteriormente (NOTA: según la siguiente URL, ahora está alojado en github.com) para corregir un error (la forma en que funciona la columna "Última compilación", que se corrigió, pero retrocedió) en la versión 1.5), y ese probablemente sea un buen lugar para comenzar.

La URL del repositorio es https://github.com/ccnet/CruiseControl.NET.

Acabo de actualizar mi copia local y tuve un avance y un posible candidato para lo que quiere es la clase CruiseServerHttpClient en el proyecto Remote.

Usando los conjuntos de Remote para obtener el estado de cada proyecto/forzar una acumulación

  • compilar el código fuente de Git
  • Crear una nueva aplicación de consola
  • Añadir una referencia a Thoughtworks.CruiseControl.Remote y NetReflector (ambos estarán en el directorio \ bin para el proyecto Remote)
  • Agregue el siguiente código a su aplicación de consola

consola de código de aplicación:

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

Para cada proyecto se obtendrá una salida similar a:

Nombre del Proyecto - Éxito

para forzar una compilación,' Haga la siguiente llamada:

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

Bajo el capó esto se traduce en una petición HTTP que se hicieron que consiste en:

POSTAL http://CC_SERVER_NAME/ccnet/ViewFarmReport.aspx HTTP/1.1
Content-Type: application/x-www-form-urlencoded
Anfitrión: 192.168 .100.180
Content-Length: 64
espera: 100-CONTINUACIÓN

ForceBuild = true & projectName = PROJECT_NAME & serverName = local

+0

Spot on answer that cheeers !! :-) –

+0

Los ensamblados Thoughtworks.CruiseControl.Remote.dll y NetReflector.dll también se encuentran en el directorio de archivos de programa cctray. – John

+0

En su ejemplo Forzar una construcción requiere el nombre y el usuario de la máquina. ¿Es solo para iniciar sesión ya que no se envía en la publicación? –

7

También puede consultar directamente a través de HTTP, mediante la carga de la página http://CC_SERVER_NAME/ccnet/XmlStatusReport.aspx.Esto devolverá un documento XML que proporciona los estados de todos sus proyectos de construcción, tal como se representa en la página http://CC_SERVER_NAME/ccnet/ViewFarmReport.aspx.

Sería bueno si pudieras profundizar en eso para obtener la historia de un proyecto de construcción - ¡tal vez puedas, no lo he intentado!

9

Agregue el paquete Nuget CruiseControl.Net a su proyecto. http://www.nuget.org/packages/CruiseControl.Net/

Esto agregará las referencias a ThoughtWorks.CruiseControl.Core, ThoughtWorks.CruiseControl.Remote y NetReflector a su (s) proyecto (s) y le brindará una manera fácil de mantenerlo actualizado.

Cuestiones relacionadas