gpt4 book ai didi

python - 如何使用 Gitlab python API 获取为给定分支创建的最新工件?

转载 作者:行者123 更新时间:2023-12-04 15:42:53 25 4
gpt4 key购买 nike

使用 this request可以在特定分支上下载在 Gitlab CI 中创建的最新工件。例如:

curl "https://mygitlab.com/api/v4/projects/MYPROJECTNAME/jobs/artifacts/MYBRANCH/download" \
--data-urlencode "job=build"

如何使用 Gitlab python API 做同样的事情? This page是我能找到的所有文档,但它无法找到最新的工作或工件。

最佳答案

您可以使用 requests 库或 python-gitlab 从作业下载最新的 GitLab 工件。您需要设置以下环境变量:

  • GITLAB_TOKEN:如果你有付费版本的 GitLab,你可以使用内置的 CI_PROJECT_TOKEN 并使用 PROJECT-TOKEN 而不是请求 header 中的 PRIVATE-TOKEN。否则,将其添加为屏蔽变量。

  • CI_PROJECT_ID:如果您从管道运行,您可以免费获得它。否则,您可以在 GitLab 的项目主页中的标题下找到 ID。

python-gitlab

从分支中的最新作业下载特定文件:

import gitlab

project_id = os.getenv('CI_PROJECT_ID') # built-in pipeline variable
gitlab_token = os.getenv('GITLAB_TOKEN') # store in masked CI/CD variable
branch_name = 'master'
job_name = 'system-tests'

gl = gitlab.Gitlab('https://gitlab.example.com', private_token=gitlab_token)
project = gl.projects.get(project_id)
raw_data = project.artifact(ref_name=branch_name, artifact_path='path/to/filename', job=job_name)

API 文档显示了一些将流数据写入文件的示例: https://python-gitlab.readthedocs.io/en/stable/gl_objects/pipelines_and_jobs.html#streaming-example

要从作业中下载 zip 文件,只使用请求库会更简单。

请求

下面的代码将作业的所有工件下载为 zip 文件。要下载单个工件文件而不是整个 zip 文件的内容,只需将下面 URL 中的 download 替换为 raw/path/to/filename

import requests

project_id = os.getenv('CI_PROJECT_ID') # built-in pipeline variable
gitlab_token = os.getenv('GITLAB_TOKEN') # stored in masked CI/CD variable
branch_name = 'master'
job_name = 'system-tests'

url = f'https://gitlab.example.com/api/v4/projects/{project_id}/jobs/artifacts/{branch_name}/download'
headers = {'PRIVATE-TOKEN': gitlab_token}
params = {'job': job_name}

response = requests.get(url=url, headers=headers, params=params)

# if artifact is a text file:
print(response.text)

关于python - 如何使用 Gitlab python API 获取为给定分支创建的最新工件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57098542/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com