触发GitHub workflow dispatch事件后如何获取对应run id
解决方案
你可以通过以下两种可靠方案获取对应run id,完全规避并发匹配错误:
方案1:添加唯一触发标识(100%准确,推荐)
- 先在对应Workflow的YAML配置中新增一个必填的自定义输入参数,示例配置如下:
on: workflow_dispatch: inputs: trigger_unique_id: description: '触发请求的全局唯一标识' required: true type: string
- 调用REST API触发Workflow时,在请求体的
inputs字段中传入你本地生成的全局唯一值(比如UUID),提前在本地留存这个值 - 后续调用
getRunsList接口获取运行列表时,遍历每个run的inputs字段,匹配到和你留存的trigger_unique_id完全一致的记录,对应的id就是本次触发的run id
如果是通过repository_dispatch事件触发,只需要把唯一标识放在client_payload中即可,后续匹配逻辑完全相同。
方案2:多维度过滤匹配(无需修改Workflow配置)
如果不方便调整Workflow的参数配置,可以用多维度组合过滤降低匹配误差:
- 触发Workflow时本地记录请求的精确时间戳、触发的目标分支/标签、指定的commit SHA、触发使用的账号信息
- 调用
getRunsList接口时先按分支、commit SHA、触发者账号做第一层过滤 - 在过滤后的结果中找
created_at字段值晚于你触发请求时间、且时间差在2秒以内的记录,正常并发场景下这个结果就是你本次触发的run
注意:如果业务场景下Workflow触发并发量超过每秒5次,不推荐使用方案2,优先选择方案1。
内容的提问来源于stack exchange,提问作者saivishnu tammineni
相关产品推荐
相关产品推荐

