2010-08-12 54 views
27

有没有一个API可以与Cruise Control .NET(ccnet)一起使用来查询服务器,例如获取各种构建的状态?有Cruise Control .NET的API吗?

我注意到在ccnet托盘应用程序中有几个选项用于连接,但我找不到服务API的任何文档或如何使用它的示例。

回答

33

当Tray应用程序使用它时肯定会有一个API。我已经从他们的SVN仓库中下载了代码(注意:根据下面的URL,它现在托管在github.com)以修复一个错误(“最后生成时间”列的工作方式 - 这是固定的,但是回归在1.5版本中),这可能是一个很好的开始。

存储库网址是https://github.com/ccnet/CruiseControl.NET

我刚刚更新了我的本地副本,并通过了一个mooch,并且您想要的是Remote项目中的CruiseServerHttpClient类。

使用Remote组件上以获得每个项目的状态/强制执行构建

  • 编译从混帐
  • 源创建一个新的控制台应用程序
  • 添加一个引用到Thoughtworks.CruiseControl.RemoteNetReflector (两者都将位于Remote项目的\ bin目录中)
  • 将以下代码添加到控制台应用程序

控制台应用程序代码:

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

对于每一个项目,你会得到类似的输出:

项目名 - 成功

强制执行构建,你” d拨打以下电话:

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

引擎盖下,这导致在HTTP请求被提出,包括:

POST http://CC_SERVER_NAME/ccnet/ViewFarmReport.aspx HTTP/1.1
内容类型:应用/ X WWW的窗体-urlencoded
主机:192.168 .100.180
的Content-Length:64
期望值:100继续

ForceBuild =真& PROJECTNAME = PROJECT_NAME & serverName = local

+0

现货答案,cheers! :-) – 2010-08-12 21:46:30

+0

程序集Whiletworks.CruiseControl.Remote.dll和NetReflector.dll也位于cctray程序文件目录中。 – John 2011-04-05 08:42:18

+0

在您的示例中强制构建需要计算机名称和用户。这仅仅是为了记录,因为它不是在邮件中发送的? – 2011-04-14 07:12:24

7

您也可以直接通过HTTP查询,通过加载页面http://CC_SERVER_NAME/ccnet/XmlStatusReport.aspx。这将返回一个XML文档,给出所有构建项目的状态,如在页面http://CC_SERVER_NAME/ccnet/ViewFarmReport.aspx上呈现的那样。

如果你能深入了解构建项目的历史 - 也许你可以,我还没有尝试过!

9

将Nuget包CruiseControl.Net添加到您的项目中。 http://www.nuget.org/packages/CruiseControl.Net/

这会将ThoughtWorks.CruiseControl.Core,ThoughtWorks.CruiseControl.Remote和NetReflector的引用添加到您的项目中,并为您提供一种简单的方法使其保持最新状态。