TeamCity On-Premises 2024.03 Help

将构建与 Agent 分离

如果构建的最后一步触发了某些外部服务,并且构建不再需要 构建代理,则相应的运行程序可以将构建从代理中分离出来。 这使得此代理可以供其他构建使用。 构建接下来会在 TeamCity 服务器上运行,外部服务将其进度直接报告给服务器。 这样的构建步骤被称为 无代理步骤

发布构建代理

为了释放其当前的构建代理,运行器需要发送 ##teamcity[buildDetachedFromAgent] 服务消息。 在接收到此消息后,代理将跳过构建的所有后续步骤,除非他们启用了 "始终执行,即使发出了构建停止命令" 执行策略。 如果必要,您可以为强制执行的最后步骤启用它 —— 只有在完成这些步骤后,代理才会被释放。

如果无代理构建的限制没有超过,服务器就会释放代理,它立即就能被其他构建使用。 否则,代理将一直附加在构建上,直到一些正在运行的无代理构建完成。

此服务消息支持 trackingInfo 属性(Unicode,最多1000个符号)以提供可能有助于在 TeamCity 服务器上跟踪构建的信息(例如,部署 ID)。

记录构建数据

在无代理步骤期间,外部工具应报告所有构建状态信息,并通过 REST API 直接向 TeamCity 服务器发送任何其他类型的请求。

要执行一个请求,需要提供:

代理应该在发布之前,提前向外部软件发送这些参数。

记录消息

要记录消息,请使用以下呼叫:

POST /app/rest/builds/id:<build_id>/log (curl -v --basic --user <username>:<password> --request POST <teamcity.url>/app/rest/builds/id:<build_id>/log --data <message> --header "Content-Type: text/plain")

在这里,您可以将任何 服务消息 作为 <message> 发送。

发送警告的请求示例:

POST /app/rest/builds/id:TestBuild/log (curl -v --basic --user TeamCityBuildId=87065:lqmT22NStn4ulqmT22NStn4ulqmT22NStn4u --request POST http://localhost:8111/app/rest/builds/id:TestBuild/log --data "##teamcity[message text='Deployment failed' errorDetails='stack trace' status='ERROR']" --header "Content-Type: text/plain")

构建完成

确保外部执行的构建向 TeamCity 服务器发送完成请求非常重要。 如果服务器暂时无法使用,无法接收此请求,那么外部工具应重试,直到此操作成功为止。 如果不发送完成请求,构建将在 TeamCity 服务器上无限期运行,直到达到其指定的超时时间(如果有的话)。

要完成构建,请使用以下调用:

PUT /app/rest/builds/id:<build_id>/finish (curl -v --basic --user <username>:<password> --request PUT <teamcity.url>/app/rest/builds/id:<build_id>/finish)

或者,您可以通过发送非空字符串的确切完成日期以 yyyyMMdd'T'HHmmssZ 格式来完成它:

PUT /app/rest/builds/id:<build_id>/finishDate (curl -v --basic --user <username>:<password> --request PUT <teamcity.url>/app/rest/builds/id:<build_id>/finishDate --data "20201231T235959+0000" --header "Content-Type: text/plain")

无代理构建的许可证

可以同时运行而不需要代理的构建数量受您激活的 agent licenses 的数量限制。 例如,如果您有 10 个代理许可证,您可以并行运行最多 10 个常规构建在代理上,外加最多可达 10 个无代理构建。 一旦您达到无代理构建的限制,TeamCity 在当前的无代理构建结束之前,不会在接下来的构建中分离步骤。

最后修改日期: 16日 7月 2024年