使用TeamCity REST API跟踪构建进度

10
我使用TeamCity (7.0)的REST API来允许开发人员触发自定义构建。我像这样将构建添加到队列中:
http://teamcity/httpAuth/action.html?add2Queue=[buildTypeId]&name=[propName]&value=[propValue]
我的问题是如何最好地跟踪刚刚触发的构建的进度。REST调用不返回有关分配给构建的构建ID的任何信息,因此即使我轮询构建列表(正在运行/完成),我也不知道其中一个是我触发的构建。队列中可能会有多个相同buildTypeId的构建,因此我需要一种方法来区分出我要找的那个。
我在某个地方读到过一个建议,即您可以为放入队列中的每个构建添加具有唯一值的构建属性,然后稍后轮询构建列表并查找具有该确切属性值的构建。但是,我还没有找到列出构建属性的方法,所以我仍然卡住了。此REST调用不提供有关属性的信息:
http://teamcity/httpAuth/app/rest/builds/?locator=buildType:[buildTypeId]
有没有解决这个问题的建议?我最好知道构建是否在队列中,是否正在运行,以及它何时完成和状态如何。最重要的是知道它是否完成以及状态如何。
3个回答

11
在进一步调查后,我找到了一个似乎很好的解决方案:
我发现即使你在使用"/builds/?locator=buildType:x"调用时没有获得任何有关自定义构建属性的信息,你仍然可以提取该列表中每个构建的构建ID,然后进行另一个REST调用以获取有关特定构建的更多详细信息。REST调用如下所示:
http://teamcity/httpAuth/app/rest/builds/id:{0}
这个调用的响应将返回一个“构建对象”,其中包含构建属性列表等信息。
我的解决方案是这样追踪构建进度的:
当将构建添加到 TeamCity 队列时,我首先向 URL 添加一个名为“BuildIdentifier”的属性。 值只是一个 GUID。 我将此标识符传回客户端应用程序,然后客户端开始轮询服务器,请求具有此特定标识符的构建的状态。 然后,服务器通过一些步骤来确定构建的当前阶段:
1:检查构建是否正在运行。 我使用调用“ / builds?locator = running:true”获取正在运行的构建列表,遍历构建并使用构建 ID 查询 REST API 获取细节。 然后,我针对每个正在运行的构建查找具有与从客户端接收到的“BuildIdentifier”属性匹配的构建。 如果在其中一个正在运行的构建中找到匹配项,则向跟踪进度的客户端发送带有消息的响应,指示构建正在以 x 百分比(构建对象的 PercentageComplete 属性)运行。 如果未找到匹配项,则继续进行步骤 2。
2:检查它是否完成:首先使用“/ builds /?locator = buildType:x”调用获取最新的构建列表。 然后做与步骤 1 中相同的事情,并从列表中提取 X 个最新的构建(我选择了 5 个)。 为了限制 REST 调用的数量,我假设如果构建已完成,则在最新的 5 个构建中。 然后查找 BuildIdentifier 的匹配项,如果找到,则返回构建的状态(FAILED、SUCCESS 等)。
3:如果在步骤 1 或 2 中没有找到 BuildIdentifier 的匹配项,则可以假定构建在队列中,因此将其作为当前状态返回。
在客户端端,只要状态显示构建正在队列中或运行中,我就每隔 x 秒轮询服务器以获取状态。
如果有其他人遇到相同的问题,希望这个解决方案能够有所帮助! 我认为,如果您使用 TeamCity REST API,则跟踪触发的构建的进度是一个非常常见的任务。

5

使用排队构建REST API是实现此目的的最佳方式,但仅从8.1版本开始提供。

  • To start the build send a POST request to ~/httpAuth/app/rest/buildQueue like this

    {
        buildType: { id: "bt667" },
        branchName: "master",
        properties: {
            property: [
                { "name": "Property", "value": "test" }
            ]
        }
    }
    
  • The response contains a href which can be used to check the status of the build.

    {
        ...
        "href": "/httpAuth/app/rest/buildQueue/taskId:49337",
        ...
    }
    
  • To check the status of the build queued send a GET request to the href specified in the response from step 1.

这是比之前的API大幅改进的一个版本。


1
自 TeamCity 8.1 版本以来,REST API 提供了一种专门的方法来触发构建,并且跟踪排队的构建结果更加容易,因为构建队列请求返回指向排队构建的链接,稍后可以使用该链接跟踪构建的当前状态。 有关详细信息,请参阅TeamCity文档

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