在我的一个应用程序中,我想触发一个Travis CI构建,在计划,运行和完成时“观察”构建,然后检索最终构建状态和构建日志以在我的应用程序中输出它 .
我从triggering a build with the API开始,它给了我一个 Request
和它的 request.id
. 这非常有效 .
-
然后我可以使用/repo/.../request/#id endpoint检索此
Request
,其中包含Request.state
和嵌入的Build
及其Build.id
以及Build.state
. -
然后我可以开始轮询/build/#id endpoint以每秒监视状态 .
-
构建完成后,我可以使用
Build
(_392999_请求时)从/job/#id/log下载日志并将其显示在我的应用程序中 .
这听起来效率很低 .
有没有更好的方法来实现这一目标?
从创建 request
到 log
是否有"quicker way"(=更少的请求)?
我可以以某种方式避免手动轮询吗?
1 回答
我将使用这个答案来记录我自己的研究,这可能有助于解决这个问题:
Travis CI API支持eager loading via ?include . 使用这个,我已经可以通过扩展的
Build
对象在Request
响应中得到Job.id
:?include=request.builds
- 我不需要为Job.id
做build
endpoints 的另一个请求 . 但是,由于我需要轮询状态更改,这并没有多大帮助 .正如@MaëlPedretti在评论中所说,特拉维斯支持webhook notifications . submitted object包含一个
id
,它是Build.id
,所以这可以取代我上面描述的轮询部分 . 由于我的应用程序不只是在一个可以配置为webhook url的服务器上运行,我需要一个有状态的服务器组件,我的应用程序可以轮询或收听 . 所以只是马交易:/