Python GitLab - 获取工件导致列表错误
Python GitLab - Getting artifacts result in list error
我尝试使用 GitLab API for Python 从 CI/CD 管道下载构建工件。我看了一下 documentation 并写了下面的例子:
import os
import time
import gitlab
import subprocess
gl = gitlab.Gitlab("MyRepo.de", private_token = "A Token")
project = gl.projects.get("MyProject")
pipelines = project.pipelines.list()
# Get the latest job from the latest pipeline
CurrentJob = None
for Pipeline in project.pipelines.list():
if(Pipeline.status == "success"):
for Job in Pipeline.jobs.list():
if(Job.status == "success"):
CurrentJob = Job
break
zipfn = "___artifacts.zip"
with open(zipfn, "wb") as f:
CurrentJob.artifacts(streamed=True, action=f.write)
subprocess.run(["unzip", "-bo", zipfn])
os.unlink(zipfn)
但是程序退出并在行 CurrentJob.artifacts(streamed=True, action=f.write)
中显示错误 'list' object is not callable
,调试器显示三个不同的文件:
但示例使用相同的代码行。访问和下载文件的正确方法是什么?我在文档中找不到任何解决方案。
这里的区别很微妙。使用 pipeline.jobs.list
不使用与 project.jobs.list
(或 .get
)
相同的底层 API
就 Python-Gitlab 库而言,当您执行 pipeline.jobs.list()
时,您会得到一个 gitlab.v4.objects.ProjectPipelineJob
对象的列表。此类对象的 .artifacts
属性不是一种方法——它是一个列表,其中包含有关工件的信息,例如文件类型、大小文件名等——这就是您在图像中看到的内容。
这与文档中显示的 gitlab.v4.objects.ProjectJob
对象不同。您从 project.jobs.get
或 project.jobs.list
.
获得此类对象
因此,要更正此错误,您可以按如下方式编辑代码的尾部:
job_id = CurrentJob.id
CurrentJob = project.jobs.get(job_id)
zipfn = "___artifacts.zip"
with open(zipfn, "wb") as f:
CurrentJob.artifacts(streamed=True, action=f.write)
subprocess.run(["unzip", "-bo", zipfn])
os.unlink(zipfn)
我尝试使用 GitLab API for Python 从 CI/CD 管道下载构建工件。我看了一下 documentation 并写了下面的例子:
import os
import time
import gitlab
import subprocess
gl = gitlab.Gitlab("MyRepo.de", private_token = "A Token")
project = gl.projects.get("MyProject")
pipelines = project.pipelines.list()
# Get the latest job from the latest pipeline
CurrentJob = None
for Pipeline in project.pipelines.list():
if(Pipeline.status == "success"):
for Job in Pipeline.jobs.list():
if(Job.status == "success"):
CurrentJob = Job
break
zipfn = "___artifacts.zip"
with open(zipfn, "wb") as f:
CurrentJob.artifacts(streamed=True, action=f.write)
subprocess.run(["unzip", "-bo", zipfn])
os.unlink(zipfn)
但是程序退出并在行 CurrentJob.artifacts(streamed=True, action=f.write)
中显示错误 'list' object is not callable
,调试器显示三个不同的文件:
但示例使用相同的代码行。访问和下载文件的正确方法是什么?我在文档中找不到任何解决方案。
这里的区别很微妙。使用 pipeline.jobs.list
不使用与 project.jobs.list
(或 .get
)
就 Python-Gitlab 库而言,当您执行 pipeline.jobs.list()
时,您会得到一个 gitlab.v4.objects.ProjectPipelineJob
对象的列表。此类对象的 .artifacts
属性不是一种方法——它是一个列表,其中包含有关工件的信息,例如文件类型、大小文件名等——这就是您在图像中看到的内容。
这与文档中显示的 gitlab.v4.objects.ProjectJob
对象不同。您从 project.jobs.get
或 project.jobs.list
.
因此,要更正此错误,您可以按如下方式编辑代码的尾部:
job_id = CurrentJob.id
CurrentJob = project.jobs.get(job_id)
zipfn = "___artifacts.zip"
with open(zipfn, "wb") as f:
CurrentJob.artifacts(streamed=True, action=f.write)
subprocess.run(["unzip", "-bo", zipfn])
os.unlink(zipfn)