有没有可以与Cruise Control .NET(ccnet)一起使用的API,例如用于查询服务器的API,以获取各种构建的状态?
我注意到ccnet托盘应用程序中有一些连接选项,但我找不到任何关于服务API的文档或如何消费它的示例。
有没有可以与Cruise Control .NET(ccnet)一起使用的API,例如用于查询服务器的API,以获取各种构建的状态?
我注意到ccnet托盘应用程序中有一些连接选项,但我找不到任何关于服务API的文档或如何消费它的示例。
肯定有一个API,因为托盘应用程序正在使用它。我之前从他们的SVN存储库中下载了代码(注意:根据下面的URL,它现在托管在github.com
上),以修复一个bug(“最后构建时间”列的工作方式 - 已经被修复,但在1.5版本中发生了回归),这可能是一个很好的起点。
存储库URL为https://github.com/ccnet/CruiseControl.NET
。
我刚刚更新了本地副本并浏览了一遍,你可能需要的一个候选项是Remote
项目中的CruiseServerHttpClient
类。
使用Remote
程序集获取每个项目的状态/强制构建
Thoughtworks.CruiseControl.Remote
和NetReflector
的引用(两者都将位于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);
}
}
}
}
每个项目都会得到类似以下输出:
项目名称 - 成功
要强制进行构建,您需要进行以下调用:
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
Content-Type: application/x-www-form-urlencoded
Host: 192.168.100.180
Content-Length: 64
Expect: 100-continueForceBuild=true&projectName=PROJECT_NAME&serverName=local
将Nuget包CruiseControl.Net添加到您的项目中。http://www.nuget.org/packages/CruiseControl.Net/
这将向您的项目添加对ThoughtWorks.CruiseControl.Core、ThoughtWorks.CruiseControl.Remote和NetReflector的引用,并为您提供一种简单的方法来保持其更新。
你也可以直接通过HTTP查询,加载页面http://CC_SERVER_NAME/ccnet/XmlStatusReport.aspx
。这将返回一个XML文档,给出所有构建项目的状态,就像在页面http://CC_SERVER_NAME/ccnet/ViewFarmReport.aspx
上呈现的一样。
如果你能深入了解构建项目的历史记录那就太棒了 - 也许你可以尝试一下!