如何使用Fastlane调用REST API 轮询检测构建任务是否取消
Fastlane调用REST API轮询检测构建状态的实现方案
方案1:使用sh动作结合curl实现(无额外依赖)
无需安装额外组件,直接复用Fastlane内置的sh动作调用系统curl命令即可实现请求,示例代码如下:
# 封装API查询方法 def query_api(url) # 调用curl同时获取响应状态码和返回内容 sh_result = sh("curl -s -w '%{http_code}' -o /tmp/api_response.json #{url.shellescape}", log: false) status_code = sh_result[-3..-1].to_i response_body = File.read("/tmp/api_response.json") return { status_code: status_code, body: response_body } end # 业务逻辑实现,和你提供的伪代码逻辑对齐 api_query_result = query_api("https://api.mysite.com") if api_query_result[:status_code] == 200 upload_to_testflight end
如果需要轮询检测,可以直接扩展循环逻辑:
max_poll_count = 12 # 最大轮询次数 poll_interval = 10 # 轮询间隔,单位秒 current_count = 0 while current_count < max_poll_count api_query_result = query_api("https://api.mysite.com") # 假设接口返回410代表构建任务已被取消 if api_query_result[:status_code] == 410 UI.user_error!("构建任务已被取消,流程终止") elsif api_query_result[:status_code] == 200 upload_to_testflight break end current_count += 1 sleep(poll_interval) end # 轮询超时处理 if current_count >= max_poll_count UI.user_error!("轮询检测超时,流程终止") end
方案2:使用Ruby内置Net::HTTP实现(更稳定,不依赖系统curl)
Fastlane本身基于Ruby开发,可以直接调用Ruby标准库的HTTP客户端实现请求,跨平台兼容性更好,也更方便自定义请求参数:
require 'net/http' require 'uri' def query_api(url) uri = URI.parse(url) http = Net::HTTP.new(uri.host, uri.port) http.use_ssl = true if uri.scheme == 'https' # 有请求超时需求可以添加如下配置 # http.open_timeout = 5 # http.read_timeout = 5 request = Net::HTTP::Get.new(uri.request_uri) # 有鉴权需求可以添加请求头,示例: # request['Authorization'] = 'Bearer 你的接口鉴权token' response = http.request(request) return { status_code: response.code.to_i, body: response.body } end # 后续的业务判断、轮询逻辑和方案1完全一致,可直接复用
实现注意点
- 可以根据你的API实际规则调整状态码、返回体的判断逻辑,比如解析返回JSON的特定字段确认构建状态
- 如果需要在多个不同的Fastlane动作之间穿插检测,可以将
query_api方法封装为公共方法放在Fastfile头部,在每个动作执行前调用一次检测即可 - 建议根据你的实际构建时长调整轮询间隔和最大重试次数,避免短时间大量请求占用API资源
- 可以在
query_api方法中添加网络异常捕获逻辑,避免网络波动导致整个Fastlane流程意外中断
内容的提问来源于stack exchange,提问作者CarlJogenburg
相关产品推荐
相关产品推荐

