Project import/export API

原文:https://docs.gitlab.com/ee/api/project_import_export.html

Project import/export API

在 GitLab 10.6 中引入 .

也可以看看:

Schedule an export

开始新的导出.

端点还接受upload参数. 此参数是一个哈希,其中包含将导出的项目上载到 Web 服务器或任何 S3 兼容平台的所有必要信息. 目前,我们仅支持将二进制数据文件上传到最终服务器.

从 GitLab 10.7 开始,如果存在upload参数,则需要upload[url]参数.

  1. POST /projects/:id/export
Attribute Type Required Description
id integer/string yes 经过身份验证的用户拥有的项目的 ID 或URL 编码路径
description string no 覆盖项目描述
upload hash no Hash that contains the information to upload the exported project to a web server
upload[url] string yes 上传项目的网址
upload[http_method] string no 上传输出项目的 HTTP 方法. 仅允许使用PUTPOST方法. 默认为PUT
  1. curl --request POST --header "PRIVATE-TOKEN: <your_access_token>" "https://gitlab.example.com/api/v4/projects/1/export" \
  2. --data "upload[http_method]=PUT" \
  3. --data-urlencode "upload[url]=https://example-bucket.s3.eu-west-3.amazonaws.com/backup?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=AKIAIMBJHN2O62W8IELQ%2F20180312%2Feu-west-3%2Fs3%2Faws4_request&X-Amz-Date=20180312T110328Z&X-Amz-Expires=900&X-Amz-SignedHeaders=host&X-Amz-Signature=8413facb20ff33a49a147a0b4abcff4c8487cc33ee1f7e450c46e8f695569dbd"
  1. { "message": "202 Accepted" }

注意:上载请求将与Content-Type: application/gzip标头一起发送. 确保您的预签名 URL 将此内容作为签名的一部分.

Export status

获取导出状态.

  1. GET /projects/:id/export
Attribute Type Required Description
id integer/string yes 经过身份验证的用户拥有的项目的 ID 或URL 编码路径
  1. curl --header "PRIVATE-TOKEN: <your_access_token>" "https://gitlab.example.com/api/v4/projects/1/export"

状态可以是以下之一:

  • none
  • queued
  • started
  • finished
  • regeneration_in_progress

queued状态表示已接收到导出请求,并且当前处于要处理的队列中.

started状态表示导出过程已开始并且当前正在进行中. 它包括导出过程,对生成的文件执行的操作,例如发送电子邮件通知用户下载文件,将导出的文件上传到 Web 服务器等.

finished状态是在导出过程完成并且已通知用户之后.

regeneration_in_progress是可以下载导出文件且正在处理生成新导出文件的请求.

_links仅在导出完成时存在.

  1. { "id": 1, "description": "Itaque perspiciatis minima aspernatur corporis consequatur.", "name": "Gitlab Test", "name_with_namespace": "Gitlab Org / Gitlab Test", "path": "gitlab-test", "path_with_namespace": "gitlab-org/gitlab-test", "created_at": "2017-08-29T04:36:44.383Z", "export_status": "finished", "_links": { "api_url": "https://gitlab.example.com/api/v4/projects/1/export/download", "web_url": "https://gitlab.example.com/gitlab-org/gitlab-test/download_export", } }

Export download

下载完成的导出.

  1. GET /projects/:id/export/download
Attribute Type Required Description
id integer/string yes 经过身份验证的用户拥有的项目的 ID 或URL 编码路径
  1. curl --header "PRIVATE-TOKEN: <your_access_token>" --remote-header-name --remote-name "https://gitlab.example.com/api/v4/projects/5/export/download"
  1. ls *export.tar.gz
  2. 2017-12-05_22-11-148_namespace_project_export.tar.gz

Import a file

  1. POST /projects/import
Attribute Type Required Description
namespace integer/string no 项目将导入到的名称空间的 ID 或路径. 默认为当前用户的名称空间
name string no 要导入的项目的名称. 如果未提供,则默认为项目的路径
file string yes 要上传的文件
path string yes 新项目的名称和路径
overwrite boolean no 如果存在具有相同路径的项目,则导入将覆盖它. 默认为假
override_params Hash no 支持在Project API 中定义的所有字段

传递的覆盖参数将优先于导出文件中定义的所有值.

要从文件系统上载文件,请使用--form参数. 这将导致 cURL 使用标题Content-Type: multipart/form-data . file=参数必须指向文件系统上的文件,并以@开头. 例如:

  1. curl --request POST --header "PRIVATE-TOKEN: <your_access_token>" --form "path=api-project" --form "file=@/path/to/file" "https://gitlab.example.com/api/v4/projects/import"

cURL 不支持从远程服务器发布文件. 从远程服务器导入项目可以通过以下方式完成:

  1. import requests
  2. from io import BytesIO
  3. s3_file = requests.get(presigned_url)
  4. url = 'https://gitlab.example.com/api/v4/projects/import'
  5. files = {'file': ('file.tar.gz', BytesIO(s3_file.content))}
  6. data = {
  7. "path": "example-project",
  8. "namespace": "example-group"
  9. }
  10. headers = {
  11. 'Private-Token': "<your_access_token>"
  12. }
  13. requests.post(url, headers=headers, data=data, files=files)
  1. { "id": 1, "description": null, "name": "api-project", "name_with_namespace": "Administrator / api-project", "path": "api-project", "path_with_namespace": "root/api-project", "created_at": "2018-02-13T09:05:58.023Z", "import_status": "scheduled", "correlation_id": "mezklWso3Za", "failed_relations": [] }

注意:可以由管理员设置最大导入文件大小,默认为 50MB. 作为管理员,您可以修改最大导入文件大小. 为此,请在” 应用程序设置” API或” 管理界面”中使用max_import_size选项.

Import status

获取导入状态.

  1. GET /projects/:id/import
Attribute Type Required Description
id integer/string yes 经过身份验证的用户拥有的项目的 ID 或URL 编码路径
  1. curl --header "PRIVATE-TOKEN: <your_access_token>" "https://gitlab.example.com/api/v4/projects/1/import"

状态可以是以下之一:

  • none
  • scheduled
  • failed
  • started
  • finished

如果状态failed ,它将在import_error下包含导入错误消息. 如果状态为failedstartedfinished时, failed_relations阵列可能与关系的任何事件未能导入无论是由于不可恢复的错误或因重试次数已经用尽被填充(一个典型的例子是查询超时.)

注意: failed_relations的元素的id字段引用失败记录,而不是关系.注意: failed_relations数组当前限制为 100 个项目.

  1. { "id": 1, "description": "Itaque perspiciatis minima aspernatur corporis consequatur.", "name": "Gitlab Test", "name_with_namespace": "Gitlab Org / Gitlab Test", "path": "gitlab-test", "path_with_namespace": "gitlab-org/gitlab-test", "created_at": "2017-08-29T04:36:44.383Z", "import_status": "started", "correlation_id": "mezklWso3Za", "failed_relations": [ { "id": 42, "created_at": "2020-04-02T14:48:59.526Z", "exception_class": "RuntimeError", "exception_message": "A failure occurred", "source": "custom error context", "relation_name": "merge_requests" } ] }