プロジェクトのインポート/エクスポートAPI
GitLab 10.6で導入されました。
こちらも参照してください。
エクスポートのスケジュール
新しい輸出を開始します。
エンドポイントは、upload
パラメータも受け付けます。このパラメータは、エクスポートしたプロジェクトをウェブサーバまたは S3 互換プラットフォームにアップロードするために必要なすべての情報を含むハッシュです。 現時点では、最終サーバへのバイナリデータファイルのアップロードのみをサポートしています。
GitLab 10.7からは、upload
パラメータがある場合、upload[url]
パラメータが必要です。
POST /projects/:id/export
属性 | タイプ | 必須 | 説明 |
---|---|---|---|
id
| 整数/文字列 | はい | 認証されたユーザーが所有するプロジェクトのIDまたはURLエンコードされたパス |
description
| 列 | いいえ | プロジェクトの説明を上書きします。 |
upload
| ハッシュ | いいえ | エクスポートしたプロジェクトをウェブサーバーにアップロードするための情報を含むハッシュ。 |
upload[url]
| 列 | はい | プロジェクトをアップロードするURL |
upload[http_method]
| 列 | いいえ | エクスポートしたプロジェクトをアップロードする HTTP メソッド。PUT とPOST メソッドのみ使用可能。デフォルトはPUT
|
curl --request POST --header "PRIVATE-TOKEN: <your_access_token>" "https://gitlab.example.com/api/v4/projects/1/export" \
--data "upload[http_method]=PUT" \
--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"
{
"message": "202 Accepted"
}
Content-Type: application/gzip
ヘッダ付きで送信されます。 署名済みURLに署名の一部としてこのヘッダが含まれていることを確認してください。輸出状況
exporter のステータスを取得します。
GET /projects/:id/export
属性 | タイプ | 必須 | 説明 |
---|---|---|---|
id
| 整数/文字列 | はい | 認証されたユーザーが所有するプロジェクトのIDまたはURLエンコードされたパス |
curl --header "PRIVATE-TOKEN: <your_access_token>" "https://gitlab.example.com/api/v4/projects/1/export"
ステータスは以下のいずれかです:
none
queued
started
finished
regeneration_in_progress
queued
状態は、Exportのリクエストを受信し、現在処理待ちのキューにあることを表します。
started
状態は、エクスポートプロセスが開始され、現在進行中であることを表します。これには、エクスポートプロセス、ファイルのダウンロードをユーザーに通知する電子メールの送信、エクスポートされたファイルのウェブサーバーへのアップロードなど、結果ファイルに対して実行されるアクションが含まれます。
finished
の状態は、Export処理が完了し、ユーザーに通知された後です。
regeneration_in_progress
は、エクスポートファイルがダウンロード可能で、新しいエクスポートの生成要求が処理中である場合です。
_links
は exporter が終了したときのみ表示されます。
{
"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",
}
}
輸出ダウンロード
完成したexporterをダウンロードしてください。
GET /projects/:id/export/download
属性 | タイプ | 必須 | 説明 |
---|---|---|---|
id
| 整数/文字列 | はい | 認証されたユーザーが所有するプロジェクトのIDまたはURLエンコードされたパス |
curl --header "PRIVATE-TOKEN: <your_access_token>" --remote-header-name --remote-name "https://gitlab.example.com/api/v4/projects/5/export/download"
ls *export.tar.gz
2017-12-05_22-11-148_namespace_project_export.tar.gz
ファイルのインポート
POST /projects/import
属性 | タイプ | 必須 | 説明 |
---|---|---|---|
namespace
| 整数/文字列 | いいえ | プロジェクトをインポートするネームスペースの ID またはパス。 デフォルトは現在のユーザーのネームスペースです。 |
name
| 列 | いいえ | インポートするプロジェクトの名前。 指定がない場合、デフォルトはプロジェクトのパスになります。 |
file
| 列 | はい | アップロードするファイル |
path
| 列 | はい | 新規プロジェクトの名前とパス |
overwrite
| ブーリアン | いいえ | 同じパスのプロジェクトがある場合、インポートはそれを上書きします。 デフォルトはfalseです。 |
override_params
| ハッシュ | いいえ | プロジェクトAPIで定義されたすべてのフィールドをサポート |
渡されたオーバーライド・パラメータは、exportファイル内で定義されたすべての値よりも優先されます。
ファイルシステムからファイルをアップロードするには、--form
引数を使用します。これにより、cURL はヘッダContent-Type: multipart/form-data
を使用してデータをポストします。file=
パラメータは、ファイルシステム上のファイルを指し、その前に@
を付ける必要があります。例えば、以下のようになります:
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はリモートサーバーからのファイル投稿をサポートしていません。 リモートサーバーからプロジェクトをインポートするには、次のようにします:
import requests
from io import BytesIO
s3_file = requests.get(presigned_url)
url = 'https://gitlab.example.com/api/v4/projects/import'
files = {'file': ('file.tar.gz', BytesIO(s3_file.content))}
data = {
"path": "example-project",
"namespace": "example-group"
}
headers = {
'Private-Token': "<your_access_token>"
}
requests.post(url, headers=headers, data=data, files=files)
{
"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": []
}
max_import_size
オプションを使用します。輸入状況
インポートのステータスを取得します。
GET /projects/:id/import
属性 | タイプ | 必須 | 説明 |
---|---|---|---|
id
| 整数/文字列 | はい | 認証されたユーザーが所有するプロジェクトのIDまたはURLエンコードされたパス |
curl --header "PRIVATE-TOKEN: <your_access_token>" "https://gitlab.example.com/api/v4/projects/1/import"
ステータスは以下のいずれかです:
none
scheduled
failed
started
finished
ステータスがfailed
の場合、import_error
の下にインポートエラーメッセージが含まれます。ステータスがfailed
、started
、finished
の場合、failed_relations
の配列に、回復不能なエラーや再試行回数がなくなったためにインポートに失敗したリレーションが含まれます(典型的な例はクエリーのタイムアウトです)。
failed_relations
の要素のid
フィールドは、リレーションではなく障害レコードを参照します。{
"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"
}
]
}