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的引用添加到您的項目中,併爲您提供一種簡單的方法使其保持最新狀態。

相關問題