我是否可以使用Cruise Control .NET(ccnet)查询服务器的API,例如获取各种构建的状态?
我注意到ccnet托盘应用程序中有一些用于连接的选项,但我找不到服务API的任何文档或如何使用它的示例。
答案 0 :(得分:34)
当托盘应用程序使用它时,肯定有一个API。我之前从他们的SVN存储库下载了代码(注意:根据下面的URL,它现在托管在github.com
)来修复错误(“最后构建时间”的方式)专栏作品 - 已修复,但在1.5版本中退步),这可能是一个很好的起点。
存储库网址为https://github.com/ccnet/CruiseControl.NET
。
我刚刚更新了我的本地副本并且通过了CruiseServerHttpClient
项目中的Remote
类可能的候选人。
使用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);
}
}
}
}
对于每个项目,您将获得类似于以下内容的输出:
ProjectName - 成功
要强制构建,您可以进行以下调用:
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
内容类型:application / x-www-form-urlencoded
主持人:192.168.100.180
内容长度:64
期待:100-continue
ForceBuild =真安培; PROJECTNAME = PROJECT_NAME&安培; SERVERNAME =本地
答案 1 :(得分:10)
将Nuget包CruiseControl.Net添加到您的项目中。 http://www.nuget.org/packages/CruiseControl.Net/
这会将对ThoughtWorks.CruiseControl.Core,ThoughtWorks.CruiseControl.Remote和NetReflector的引用添加到您的项目中,并为您提供一种简单的方法来使其保持最新。
答案 2 :(得分:7)
您还可以通过加载页面http://CC_SERVER_NAME/ccnet/XmlStatusReport.aspx
直接通过HTTP进行查询。这将返回一个XML文档,其中包含所有构建项目的状态,如在页面http://CC_SERVER_NAME/ccnet/ViewFarmReport.aspx
上呈现的那样。
如果您可以深入了解构建项目的历史,那将是很好的 - 也许您可以,我还没有尝试过!