2012-08-15 26 views
9

我使用TeamCity(7.0)REST API來允許開發人員觸發自定義構建。我構建添加到隊列是這樣的:使用TeamCity REST API跟蹤構建過程

HTTP://teamcity/httpAuth/action.html add2Queue = [buildTypeId] &名= [PROPNAME] &值= [propValue]

我的問題是我如何才能最好地跟蹤剛剛觸發的構建進度。 REST調用不會返回任何有關構建ID分配給構建的信息,所以即使我輪詢構建列表(運行/完成),我也不知道它們中的一個是我觸發的構建ID。在隊列中可能會有相同buildTypeId的幾個版本,所以我需要一種方法來分離出我之後的版本。

我在某處讀了一個建議,您可以添加一個具有唯一值的構建屬性給您放入隊列的每個構建,然後再輪詢構建列表並查找具有該確切屬性值的構建列表。但是我沒有找到一種列出構建屬性的方法,所以我仍然陷入困境。此REST調用不提供有關屬性的信息:

的http://的TeamCity/httpAuth /應用/ REST /建立/定位器= buildType:[buildTypeId]

如何解決這個有什麼建議?我最好想知道構建是否在隊列中,如果它正在運行,什麼時候完成,我想獲得狀態。然而,最重要的是知道它是否已完成,狀態如何。

回答

11

經過進一步調查中,我想出了一個解決方案,這似乎很好地工作:

我發現,即使你沒有得到有關自定義的任何信息建立一個使用「/構建/屬性? locator = buildType:x「調用,您可以提取該列表中每個構建的構建ID,然後執行另一個REST調用以獲取有關一個特定構建的更多詳細信息。其餘的調用如下:

http://teamcity/httpAuth/app/rest/builds/id:{0} 

從這一呼籲的迴應會給你一個「建對象」,其中包含構建屬性的列表,等等。

我跟蹤構建過程的解決辦法是那麼這樣的:

當構建添加到隊列TeamCity的,我第一次一個屬性添加到名爲「BuildIdentifier」的URL。該值只是一個GUID。我將這個標識符傳遞迴客戶端應用程序,然後客戶端開始輪詢服務器,請求具有此特定標識符的構建狀態。服務器然後通過一些步驟來確定構建的當前階段:

1:檢查構建是否正在運行。我通過調用「/ builds?locator = running:true」獲得正在運行的構建列表,遍歷構建並使用構建標識查詢REST API以獲取詳細信息。然後,我會仔細查看每個正在運行的構建的詳細信息,以查找具有匹配的「BuildIdentifier」屬性的構建版本,以查找從客戶端收到的版本。如果在某個正在運行的構建中存在匹配,則發送一條響應消息,指出構建正在以百分比x(構建對象的PercentageComplete屬性)運行到正在跟蹤進度的客戶端。如果找不到匹配項,我繼續執行步驟2.

2:檢查是否完成:首先使用「/ builds /?locator = buildType:x」調用獲取最新生成列表。然後執行與步驟1中相同的操作,並從列表中提取X最新版本(我選擇了5)。爲了限制REST調用的數量,我設置了一個假設,如果構建完成,它將在最新的5個構建中。然後我在BuildIdentifier上查找一個匹配項,如果我得到一個,我會返回構建狀態(失敗,成功等)。

3:如果在步驟1或2中沒有與BuildIdentifier匹配,我可以假設構建在隊列中,所以我將其作爲當前狀態返回。

在客戶端,只要狀態表示構建在隊列中或正在運行,就會每隔x秒輪詢服務器的狀態。

希望這個解決方案可能會有幫助,如果有其他人有同樣的問題在那裏!如果您使用TeamCity REST API,我認爲跟蹤觸發構建的進度是一項相當常見的任務。

1

由於TeamCity 8.1,REST API有一種專門的方法來觸發構建並跟蹤排隊的構建結果,因爲構建隊列請求返回鏈接到隊列構建,後者可用於跟蹤構建的當前狀態。 請參閱TeamCity documentation的詳細信息。

3

Queued Builds rest api是完成此操作的最佳方法,但只有從版本8.1開始纔可用。

  • 要開始構建發送POST請求來~/httpAuth/app/rest/buildQueue這樣

    { 
        buildType: { id: "bt667" }, 
        branchName: "master", 
        properties: { 
         property: [ 
          { "name": "Property", "value": "test" } 
         ] 
        } 
    } 
    
  • 該響應包含可用於檢查構建的狀態A HREF。

    { 
        ... 
        "href": "/httpAuth/app/rest/buildQueue/taskId:49337", 
        ... 
    } 
    
  • 要檢查構建的狀態排隊發送GET請求,從步驟1

這是較API一個巨大的改進在響應中指定的HREF。

+0

響應是否包含構建日期? – Psl 2016-03-17 05:02:57

相關問題