【问题标题】:TeamCity - how to get currently running builds via REST API?TeamCity - 如何通过 REST API 获取当前正在运行的构建?
【发布时间】:2011-01-20 18:25:39
【问题描述】:

有谁知道如何使用 TeamCity REST API 找出当前正在运行的构建以及它们的运行时间(经过的时间与估计的时间)?

Ta 马特

【问题讨论】:

  • 我认为这些信息无法通过 REST API 获得。但如果可以的话,我会很高兴;)

标签: rest teamcity


【解决方案1】:

URL 返回您要求的内容,包括完成百分比。 http://teamcityserver/httpAuth/app/rest/builds?locator=running:true

<builds count="1">
    <build id="10" number="8" running="true" percentageComplete="24" status="SUCCESS" buildTypeId="bt3" startDate="20110714T210916+1200" href="/httpAuth/app/rest/builds/id:10" webUrl="http://phillipn02:29000/viewLog.html?buildId=10&buildTypeId=bt3"/>
</builds>

来源:http://devnet.jetbrains.net/message/5291132#5291132REST API documentation 上的相关行显示为“http://teamcity:8111/httpAuth/app/rest/builds/?locator= - 通过“构建定位器”获取构建。”在“使用”部分。

这适用于 TeamCity 6.5 版;我没有在早期版本上尝试过,但我怀疑它会在版本 5 上运行。

【讨论】:

  • 感谢您抽出宝贵时间回答这个问题。这对我来说是谷歌的第一个结果并回答了我的查询。你摇滚。
  • Above 将仅返回使用 defaultBranch (TeamCity 9.x) 的构建。此定位器将返回所有正在运行的构建:locator=running:true,branch:default:any
【解决方案2】:

您可以使用“running:true/false/any”作为构建定位器的构建维度之一。 (编辑:在 TeamCity 6.0 中添加)

http://confluence.jetbrains.net/display/TW/REST+API+Plugin

TeamCity REST API 文档将为您提供一些构建 URL 方法的示例。该页面上的 Build Locator 部分将列出您用于优化结果的不同选项(其中一个正在运行)。

但是,我不知道如何使用 REST API 获取有关正在运行的构建经过/估计的时间的信息。我不确定这是否可能。如果您确实找到了这样做的方法,我将非常有兴趣了解如何!

祝你好运!

【讨论】:

  • 嗯。我尝试使用 running:true,但它只是带回了与我不包含它时相同的列表。再深入一点,看起来 REST API 只处理本质上是静态或历史数据,而不是当前状态,例如当前正在运行的构建 - 似乎根本无法获得这一点。也许它在更高版本的 TC 上受支持(我在 5.1.5 上)
  • 事实上,最好混合使用 REST API 和 /win32/userStatus.html - 它使用 /ajax.html?getRunningBuilds=1 和 /eventTracker.html。哦,好吧,希望有一个漂亮、简单的界面……
  • 运行构建维度非常有趣,Matt。我以前从未需要使用 running:true;在使用 REST API 做其他事情时,我只是稍微记下了它。在玩了一会儿之后,我意识到它似乎也没有过滤出适合我的构建。当您研究 REST 引用历史数据时,您是否偶然发现了 running:true 的预期用途?遗憾的是,我认为您需要与 REST API 混合使用是对的。
  • 我成功调用了 REST API 以返回正在运行的构建。请参阅我发布的网址作为问题的答案。
【解决方案3】:

我知道你的问题已经超过五年了,但你想要

找出当前正在运行的构建,以及它们的运行时间(经过的时间与估计的时间)

accepted answer 中建议的方法只提供了percentageComplete 属性,如果不再次调用 API,它就没有那么有用了。


可以通过将fields request parameter 提供给 url 来实现,例如:

serverUrl/httpAuth/app/rest/builds/?locator=running:true&fields=count,build({buildFields})

其中{buildFields}builds 对象的属性。为此,我正在使用:

id,buildTypeId,number,status,branchName,startDate,queuedDate,href,running-info

那么完整的url就是

serverUrl/httpAuth/app/rest/builds/?locator=running:true&fields=count,build(id,buildTypeId,number,status,branchName,startDate,queuedDate,href,running-info)

返回类似的东西

<builds count="1">
    <build id="128990" buildTypeId="{build type ID}" number="256" status="SUCCESS" branchName="{branch name}" href="/httpAuth/app/rest/builds/id:128990">
        <running-info percentageComplete="6" elapsedSeconds="52" estimatedTotalSeconds="924" currentStageText="{status}" outdated="false" probablyHanging="false"/>
        <queuedDate>20160421T102558+0100</queuedDate>
        <startDate>20160421T105709+0100</startDate>
    </build>
</builds>

这将为您提供running-info 元素中的完成百分比和经过/估计的总时间。

注意:我使用的是 TeamCity 9; TeamCity 5.x-7.x 文档中的字段请求参数appears to be present,但输出可能不完全相同。

【讨论】:

    【解决方案4】:

    我做了一点挖掘,a post on JetBrain's site 声明实际上是为 TC6 添加了对 running:true 的支持。 TeamCity 5.X REST documentation 只是链接到一个不同的页面,它没有指定 TC5 支持的内容以及 TC6 的新内容。

    编辑:嘿,马特,我发布了一个关于 REST documentation specific to TC 5.X 的问题。我知道我知道我可以用 REST 对我正在使用的 TeamCity 版本做些什么对我来说非常方便,并且我认为它也可能会让你感兴趣!

    【讨论】:

      【解决方案5】:

      你有一个变体使用不是 api -

      [http://teamcity/ajax.html?getRunningBuilds=1]

      所以它不是很好的变种,但对我来说它非常好!

      【讨论】: