2012-08-15 24 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

相关问题