プロジェクトのインポート/エクスポート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 メソッド。PUTPOST メソッドのみ使用可能。デフォルトは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": []
}
注:最大インポートファイルサイズは管理者が設定でき、デフォルトは50MBです。 管理者として、最大インポートファイルサイズを変更することができます。これを行うには、アプリケーション設定APIまたは管理者UIの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の下にインポートエラーメッセージが含まれます。ステータスがfailedstartedfinishedの場合、failed_relations の配列に、回復不能なエラーや再試行回数がなくなったためにインポートに失敗したリレーションが含まれます(典型的な例はクエリーのタイムアウトです)。

注:failed_relations の要素のid フィールドは、リレーションではなく障害レコードを参照します。
注:** の配列は現在100件が上限です。
{
  "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"
    }
  ]
}