You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

GitLab API过滤成功作业失效:获取非成功作业日志问题排查

问题排查与修复

你的问题出在获取流水线作业时没有过滤作业的状态:虽然你筛选了状态为success的流水线,但流水线的整体成功不代表其下所有作业都是成功状态(比如可能有作业被跳过、失败后重试成功,原失败作业仍保留在列表中)。你直接取返回的第一个作业,自然可能拿到非成功状态的作业trace。

修复步骤

  1. 获取指定流水线的作业列表后,新增过滤逻辑,只保留状态为success的作业
  2. 增加空值判断,避免过滤后无符合条件的作业导致索引报错

修改后的代码

response = requests.get(GITLAB_PROJECT_BASE_URL + '/pipeline_schedules/' + str(PIPELINE_SCHEDULE_ID) + '/pipelines', headers=headers)
successful_pipelines = list(filter(lambda x: x['status'] == 'success', json.loads(response.text)))
if not successful_pipelines:
    print("没有找到成功的流水线")
    exit()
pipeline_id = successful_pipelines[-1]['id']

# 获取该流水线的作业并过滤出成功状态的作业
response = requests.get(GITLAB_PROJECT_BASE_URL + '/pipelines/{}/jobs'.format(pipeline_id), headers=headers)
jobs = json.loads(response.text)
successful_jobs = list(filter(lambda x: x['status'] == 'success', jobs))
if not successful_jobs:
    print(f"流水线{pipeline_id}下没有成功的作业")
    exit()

# 取第一个成功作业的trace(如果需要最后一个,就用successful_jobs[-1])
target_job_id = successful_jobs[0]['id']
log_file = str(target_job_id) + ".trace"
download_file(GITLAB_PROJECT_BASE_URL + '/jobs/{}/trace'.format(target_job_id), log_file)
last_pipeline_job_response_time = get_response_time_trph_from_log(log_file)
get_diff_with_last_pipeline(last_pipeline_job_response_time)

额外说明

  • 如果你的需求是取该流水线中最后一个成功的作业,把successful_jobs[0]改成successful_jobs[-1]即可
  • GitLab API返回的作业列表默认按创建时间升序排列,第一个是最早创建的作业,最后一个是最晚创建的作业

内容的提问来源于stack exchange,提问作者user22329726

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.14 17:08:14