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

Python调用GitLab API下载CI/CD构件时报list对象不可调用错误

问题原因

你调用Pipeline.jobs.list()返回的是轻量化的Job预览对象,该对象的artifacts属性是存储当前任务所有构件元信息的列表,而非官方文档里提到的构件下载方法,所以直接调用会抛出'list' object is not callable异常。

解决方法

需要通过Job ID拉取完整的Job对象后,再调用下载方法即可,同时可以优化原逻辑避免取不到有效Job时的空指针问题,修正后完整代码如下:

import os
import gitlab
import subprocess

gl = gitlab.Gitlab("MyRepo.de", private_token="A Token")
project = gl.projects.get("MyProject")

current_job = None
# 按更新时间倒序遍历流水线,优先取最新的
for pipeline in project.pipelines.list(order_by="updated_at", sort="desc"):
    if pipeline.status == "success":
        # 按更新时间倒序遍历任务,优先取最新的成功任务
        for job in pipeline.jobs.list(order_by="updated_at", sort="desc"):
            if job.status == "success":
                # 拉取完整Job对象,包含构件下载方法
                current_job = gl.jobs.get(job.id)
                break
        if current_job:
            break

if not current_job:
    raise Exception("未查询到符合条件的成功构建任务")

zipfn = "___artifacts.zip"
with open(zipfn, "wb") as f:
    current_job.artifacts(streamed=True, action=f.write)
subprocess.run(["unzip", "-bo", zipfn])
os.unlink(zipfn)

可选:单独下载指定构件文件

如果不需要全量下载构件压缩包,只想获取单个指定文件,可以使用如下方法:

# 示例为下载构件中路径为build/output.apk的文件,保存到本地output.apk
with open("output.apk", "wb") as f:
    current_job.artifacts.get_file("build/output.apk", streamed=True, action=f.write)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 01:15:06