Cruise Control .NET 是否有 API 可用?

29

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

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

3个回答

34

肯定有一个API,因为托盘应用程序正在使用它。我之前从他们的SVN存储库中下载了代码(注意:根据下面的URL,它现在托管在github.com),以修复一个bug(“最后构建时间”列的工作方式 - 已经被修复,但在1.5版本中发生了回归),这可能是一个很好的起点。

存储库URL为https://github.com/ccnet/CruiseControl.NET

我刚刚更新了本地副本并浏览了一遍,你可能需要的一个候选项是Remote项目中的CruiseServerHttpClient类。

使用Remote程序集获取每个项目的状态/强制构建

  • 从git编译源代码
  • 创建一个新的控制台应用程序
  • 添加对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);
            }
        }
    }
}

每个项目都会得到类似以下输出:

项目名称 - 成功

要强制进行构建,您需要进行以下调用:

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-continue

ForceBuild=true&projectName=PROJECT_NAME&serverName=local


非常准确的答案,太棒了!! :-) - REA_ANDREW
程序集Thoughtworks.CruiseControl.Remote.dll和NetReflector.dll也位于cctray程序文件目录中。 - John
在您的示例中,强制构建需要机器名称和用户。这只是为了记录日志,因为它不会在邮件中发送? - Luke Mcneice
@Luke - 没有头绪,我怀疑它可能是完全多余的,因为它没有通过网络发送,或者像你所暗示的那样仅用于日志记录。 - Rob
我可以打印出项目列表,但是尝试强制构建没有任何反应。有人能够解决这个问题吗? - zalpha314

10

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

这将向您的项目添加对ThoughtWorks.CruiseControl.Core、ThoughtWorks.CruiseControl.Remote和NetReflector的引用,并为您提供一种简单的方法来保持其更新。


8

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

如果你能深入了解构建项目的历史记录那就太棒了 - 也许你可以尝试一下!


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接