使用 TeamCity REST API 跟踪构建进度

2023-11-24

我使用 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]

关于如何解决这个问题有什么建议吗?理想情况下,我想知道构建是否在队列中,是否正在运行,以及何时完成,我想获取状态。然而,最重要的是知道它是否已完成以及状态如何。


经过进一步的调查,我想出了一个解决方案,看起来效果很好:

我发现,即使您没有使用“/builds/?locator=buildType:x”调用获得有关自定义构建属性的任何信息,您也可以提取该列表中每个构建的构建 ID,然后执行以下操作:另一个 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 上查找匹配项,如果找到匹配项,我将返回构建的状态(失败、成功等)。

3:如果步骤 1 或 2 中的 BuildIdentifier 不匹配,我可以假设构建位于队列中,因此我将其作为当前状态返回。

在客户端,只要状态表明构建在队列中或正在运行,我就会每隔 x 秒轮询一次服务器的状态。

如果其他人也遇到同样的问题,希望这个解决方案能够有所帮助!我认为,如果您使用 TeamCity REST API,那么跟踪触发构建的进度是一项非常常见的任务。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用 TeamCity REST API 跟踪构建进度 的相关文章

  • 使用 django-rest-framework 设置对象级权限

    尝试使用 django rest framework 最干净 最规范地管理 django guardian 对象级权限 我想将对象的读取权限 module view object 分配给在执行 POST 时发出请求的用户 我的基于阶级的观点
  • 以 REST 方式更新整个资源集合

    我有一个资源列表的 REST URI 例如 http foo com group users 这些用户中的每一个都有一个序列号 我想公开一种方法来为集合中的所有用户重新编号这些值 并使访问该列表的每个人都可以使用此更改 由于这是对整个集合的
  • 如何共享 Swagger 文档

    我最近开始使用 Swagger 来编写文档 但有一些事情我仍然不清楚 我创建了 YAML 文档 现在我希望能够与团队的其他成员共享 pdf 或 HTML Javascript 页面中的文档 我无法使用 SwaggerHub 因为它们没有私有
  • ASP.NET MVC 4 Web Api 和 REST 经典服务之间的区别

    我看到了ASP Net MVC4 WebApi将服务公开为 Rest 服务 但实际上和正常有什么区别Rest and ASP Net MVC4 WebApi 我不确定你的意思normal Rest REST http en wikipedi
  • 使用 Hudson 将构建与部署分开

    我们已经开始使用Hudson 目前的工作流程是 本地签出 gt 代码 gt 运行测试 gt 更新 gt 运行测试 gt 提交 Hudson 并不进行轮询 而是只是坐在那里 直到我们实例化构建 然后它 本地结帐 gt 运行 Phing 脚本
  • 无法让 TeamCity 使用默认私钥向 GitHub 进行身份验证

    我正在尝试让 TeamCity 构建我的私人 GitHub 存储库 当我显式设置密钥文件的路径时 我能够成功让我的 VCS 根通过连接测试 然而 尽管进行了大量的谷歌搜索 当我使用 默认私钥 选项时 我无法让它工作 我明白了com jcra
  • TeamCity:防止 2 个构建同时运行

    我不希望构建配置 A 和构建配置 B 同时运行 这是因为它们共享无法同时访问的相同资源 然而 每个构建配置都由单独的代理运行 因此它们可以同时运行 相反 我希望一个构建配置在触发时等待另一个构建配置 如果它正在运行 完成 例如 如果构建配置
  • 从 Delphi 访问 TRAKT API - 承载身份验证问题

    使用 TOauth2Authenticator TRESTClient TRESTRequest TRESTResponseDataSet TRESTResponse TFDmemtable 和 TDataSource 我成功连接到 Tra
  • VSTS 使用 API 在队列时设置构建参数

    我需要对来自 REST API 的 VSTS 构建进行排队 记录于https learn microsoft com en us rest api vsts build builds queue view vsts rest 4 1 htt
  • 如何让 Swagger UI 的参数成为下拉菜单而不是文本输入

    我正在使用 swagger 来显示我的 RESTApi API 的一个参数将字符串作为输入并将其转换为枚举值 有没有办法在 Swagger UI 上显示下拉菜单而不是文本输入字段 以便用户只能选择枚举值中的字符串值 您可以使用以下 swag
  • WebAPI 和 Angular JS Excel 文件下载 - 文件损坏

    我正在 WebAPI 中生成 Excel 文件 我将其 存储 在内存流中 然后放入响应 如下所示 var result new HttpResponseMessage HttpStatusCode OK Content new Stream
  • 传递自定义类型查询参数

    如何接受自定义类型查询参数 public String detail QueryParam request final MYRequest request 上面的行在启动服务器时出现错误 jersey server model ModelV
  • 使用 mocha/chai 确保 REST API 提供文件?

    我想验证对 REST API 端点之一的调用是否正在提供文件 但我不确定如何进行操作 并且我没有看到任何相关示例 我确实看过文档 http chaijs com api bdd 但这对我没有多大帮助 服务器端代码本质上是 在 Express
  • WCF、REST、SSL、客户端、自定义证书验证

    我有一个无法解决的具体问题 让我详细解释一下 我是这项技术的新手 所以我可能使用了一些错误的术语 如有不明白之处 请指正并解释或要求解释 我正在创建一个自托管的 WCF REST 服务器 托管在 WPF 应用程序中 它使用 https SL
  • 如何仅在特定错误退出值(0 除外)上将 Jenkins 构建标记为成功?

    当我运行Execute shell构建步骤来执行脚本并且该脚本返回0 Jenkins将构建标记为SUCCESS 否则它将其标记为FAILURE这是预期的默认行为0表示没有错误 任何其他值表示有错误 有没有办法将构建标记为SUCCESS仅当返
  • Flask Restful API url

    我正在使用 Flask RESTful http flask restful readthedocs org en latest index html http flask restful readthedocs org en latest
  • 如何使用 Azure DevOps REST API 创建新的构建管道?

    我正在尝试以编程方式创建新的构建管道 我正在寻找用于此操作的 Azure DevOps REST API 我没有获得使用 REST API 创建管道的正确示例 请指教 如何使用 Azure DevOps REST API 创建新的构建管道
  • 找不到 Java 类型 myPackage.B 类和 MIME 媒体类型 application/octet-stream 的消息正文编写器

    我是 RESTful Web 服务的新手 正在尝试更新我的 OneToMany来自独立客户端应用程序的关系 但我无法做到这一点 我正在使用 Glassfish 3 1 1 附带的 JAX RS 的 Jersey 实现 我有课A有一个 One
  • 来自客户端的超时 Web 服务调用

    我正在使用 RestEasy 客户端调用网络服务 一项要求是 如果调用运行时间超过 5 秒 则中止 超时调用 我如何使用 RestEasy 客户端实现这一目标 我只看到服务器端超时 即如果在一定时间内未完成请求 Rest Easy 网络服务
  • 如果单个 POST 请求创建多个资源,是否被认为是 RESTful?

    我们有客户 API 它采用 customer name customer mobile customer email 并在数据库中创建客户 我们还有接受 productId customer name customer mobile cus

随机推荐