ジョブアーティファクトAPI

ジョブアーティファクトの取得

アーティファクトダウンロードAPIでCI_JOB_TOKENGitLab Premium9.5で導入されました。

プロジェクトのアーティファクトの zip アーカイブを取得します。

GET /projects/:id/jobs/:job_id/artifacts
属性種類必須説明
id整数/文字列はい プロジェクトのIDまたはURLエンコードされたパス
job_id整数。はいジョブのID。
job_token 文字列です。なしマルチプロジェクトパイプラインのトリガーで使用します。.gitlab-ci.yml ファイルで定義された CI/CD ジョブでのみ起動されるべきです。値は常に$CI_JOB_TOKEN. $CI_JOB_TOKEN$CI_JOB_TOKEN関連付けられたジョブは $CI_JOB_TOKEN、このトークンが使用されるときに実行されていなければなりません。

PRIVATE-TOKEN ヘッダーを使用したリクエストの例です:

curl --location --output artifacts.zip --header "PRIVATE-TOKEN: <your_access_token>" "https://gitlab.example.com/api/v4/projects/1/jobs/42/artifacts"

.gitlab-ci.yml 内部のscript 定義でこれを使うには、次のどちらかを使います。 の中で使うには

  • JOB-TOKEN ヘッダと GitLab が提供するCI_JOB_TOKEN 変数。例えば、次のジョブは42 という ID のジョブのアーティファクトをダウンロードします。コマンドはコロン (:) を含むためシングルクォートで囲まれています:

     artifact_download:
       stage: test
       script:
         - 'curl --location --output artifacts.zip --header "JOB-TOKEN: $CI_JOB_TOKEN" "https://gitlab.example.com/api/v4/projects/1/jobs/42/artifacts"'
    
  • あるいは、job_token 属性を GitLab が提供するCI_JOB_TOKEN 変数で指定します。例えば、次のジョブは ID42 のジョブのアーティファクトをダウンロードします:

     artifact_download:
       stage: test
       script:
         - 'curl --location --output artifacts.zip "https://gitlab.example.com/api/v4/projects/1/jobs/42/artifacts?job_token=$CI_JOB_TOKEN"'
    

可能なレスポンスのステータスコード

ステータス説明
200アーティファクトファイルを提供します。
404ビルドが見つからないか、アーティファクトがありません。

アーティファクトアーカイブのダウンロード

アーティファクトダウンロードAPIでCI_JOB_TOKENGitLab Premium9.5で導入されました。

与えられた参照名とジョブのパイプラインのうち、ジョブが正常に終了したものからアーティファクトの zip アーカイブをダウンロードします。これはジョブのアーティファクトを取得するのと同じですが、ジョブの ID の代わりにジョブ名を定義します。

note
パイプラインが他の子パイプラインの親である場合、アーティファクトは親から子へと階層順に検索されます。たとえば、親パイプラインと子パイプラインの両方に同じ名前のジョブがある場合、親パイプラインのアーティファクトが返されます。
GET /projects/:id/jobs/artifacts/:ref_name/download?job=name

パラメータ

属性種類必須説明
id整数/文字列はい プロジェクトのIDまたはURLエンコードされたパス
ref_name文字列です。はいリポジトリ内のブランチ名またはタグ名。HEAD または SHA 参照はサポートされていません。
job文字列です。はいジョブの名前。
job_token 文字列です。なしマルチプロジェクトパイプラインのトリガーで使用します。.gitlab-ci.yml ファイルで定義された CI/CD ジョブでのみ起動されるべきです。値は常に$CI_JOB_TOKEN. $CI_JOB_TOKEN$CI_JOB_TOKEN関連付けられたジョブは $CI_JOB_TOKEN、このトークンが使用されるときに実行されていなければなりません。

PRIVATE-TOKEN ヘッダーを使用したリクエストの例です:

curl --location --header "PRIVATE-TOKEN: <your_access_token>" "https://gitlab.example.com/api/v4/projects/1/jobs/artifacts/main/download?job=test"

.gitlab-ci.yml 内部のscript 定義でこれを使うには、次のどちらかを使います。 の中で使うには

  • JOB-TOKEN ヘッダと GitLab が提供するCI_JOB_TOKEN 変数。例えば、次のジョブはmain ブランチのtest ジョブのアーティファクトをダウンロードします。コマンドはコロン (:) を含むためシングルクォートで囲まれています:

     artifact_download:
       stage: test
       script:
         - 'curl --location --output artifacts.zip --header "JOB-TOKEN: $CI_JOB_TOKEN" "https://gitlab.example.com/api/v4/projects/$CI_PROJECT_ID/jobs/artifacts/main/download?job=test"'
    
  • あるいは、job_token 属性に GitLab が提供するCI_JOB_TOKEN 変数を指定します。例えば、次のジョブはmain ブランチのtest ジョブのアーティファクトをダウンロードします:

     artifact_download:
       stage: test
       script:
         - 'curl --location --output artifacts.zip "https://gitlab.example.com/api/v4/projects/$CI_PROJECT_ID/jobs/artifacts/main/download?job=test&job_token=$CI_JOB_TOKEN"'
    

可能なレスポンスのステータスコード

ステータス説明
200アーティファクトファイルを提供します。
404ビルドが見つからないか、アーティファクトがありません。

ジョブIDで単一のアーティファクトファイルをダウンロードします。

指定されたIDのジョブから単一のアーティファクトファイルを、そのジョブのアーティファクトZIPアーカイブ内からダウンロードします。ファイルはアーカイブから抽出され、クライアントにストリーミングされます。

GET /projects/:id/jobs/:job_id/artifacts/*artifact_path

パラメータ

属性種類必須説明
id整数/文字列はい プロジェクトのIDまたはURLエンコードされたパス
job_id整数。はい一意のジョブ識別子。
artifact_path文字列です。はいアーティファクトアーカイブ内のファイルへのパス。
job_token 文字列です。なしマルチプロジェクトパイプラインのトリガーで使用します。.gitlab-ci.yml ファイルで定義された CI/CD ジョブでのみ起動されるべきです。値は常に$CI_JOB_TOKEN. $CI_JOB_TOKEN$CI_JOB_TOKEN関連付けられたジョブは $CI_JOB_TOKEN、このトークンが使用されるときに実行されていなければなりません。

リクエストの例

curl --location --header "PRIVATE-TOKEN: <your_access_token>" "https://gitlab.example.com/api/v4/projects/1/jobs/5/artifacts/some/release/file.pdf"

可能なレスポンスのステータスコード

ステータス説明
200単一のアーティファクトファイルを送信します。
400無効なパスが指定されました
404ビルドが見つからないか、ファイル/アーティファクトがありません。

特定のタグまたはブランチから単一のアーティファクトファイルをダウンロードします。

ジョブのアーティファクトアーカイブの中から、指定された参照名で成功した最新のパイプラインの特定のジョブの単一のアーティファクトファイルをダウンロードします。ファイルはアーカイブから抽出され、クライアントにストリーミングされます。

アーティファクトファイルは、CSVエクスポートで利用可能なものよりも詳細な情報を提供します。

親パイプラインと子パイプラインのアーティファクトは、親から子へと階層順に検索されます。たとえば、親パイプラインと子パイプラインの両方に同じ名前のジョブがある場合、親パイプラインのアーティファクトが返されます。

GET /projects/:id/jobs/artifacts/:ref_name/raw/*artifact_path?job=name

パラメータを指定します:

属性種類必須説明
id整数/文字列はい プロジェクトのIDまたはURLエンコードされたパス
ref_name文字列です。はいリポジトリ内のブランチまたはタグ名。HEAD またはSHA 参照はサポートされていません。
artifact_path文字列です。はいアーティファクトアーカイブ内のファイルへのパス。
job文字列です。はいジョブの名前。
job_token 文字列です。なしマルチプロジェクトパイプラインのトリガーで使用します。.gitlab-ci.yml ファイルで定義された CI/CD ジョブでのみ起動されるべきです。値は常に$CI_JOB_TOKEN. $CI_JOB_TOKEN$CI_JOB_TOKEN関連付けられたジョブは $CI_JOB_TOKEN、このトークンが使用されるときに実行されていなければなりません。

リクエストの例

curl --location --header "PRIVATE-TOKEN: <your_access_token>" "https://gitlab.example.com/api/v4/projects/1/jobs/artifacts/main/raw/some/release/file.pdf?job=pdf"

可能なレスポンスのステータスコード

ステータス説明
200単一のアーティファクトファイルを送信します。
400無効なパスが指定されました
404ビルドが見つからないか、ファイル/アーティファクトがありません。

アーティファクトを保持

有効期限が設定されている場合、アーティファクトが削除されないようにします。

POST /projects/:id/jobs/:job_id/artifacts/keep

パラメータ

属性種類必須説明
id整数/文字列はい認証ユーザーが所有するプロジェクトのIDまたはURLエンコードされたパス
job_id整数。はいジョブのID。

リクエストの例

curl --request POST --header "PRIVATE-TOKEN: <your_access_token>" "https://gitlab.example.com/api/v4/projects/1/jobs/1/artifacts/keep"

応答例

{
  "commit": {
    "author_email": "admin@example.com",
    "author_name": "Administrator",
    "created_at": "2015-12-24T16:51:14.000+01:00",
    "id": "0ff3ae198f8601a285adcf5c0fff204ee6fba5fd",
    "message": "Test the CI integration.",
    "short_id": "0ff3ae19",
    "title": "Test the CI integration."
  },
  "coverage": null,
  "allow_failure": false,
  "download_url": null,
  "id": 42,
  "name": "rubocop",
  "ref": "main",
  "artifacts": [],
  "runner": null,
  "stage": "test",
  "created_at": "2016-01-11T10:13:33.506Z",
  "started_at": "2016-01-11T10:13:33.506Z",
  "finished_at": "2016-01-11T10:15:10.506Z",
  "duration": 97.0,
  "status": "failed",
  "failure_reason": "script_failure",
  "tag": false,
  "web_url": "https://example.com/foo/bar/-/jobs/42",
  "user": null
}

ジョブのアーティファクトの削除

ジョブのアーティファクトを削除します。

前提条件:

  • 少なくともプロジェクトのメンテナーのロールを持っている必要があります。
DELETE /projects/:id/jobs/:job_id/artifacts
属性種類必須説明
id整数/文字列はい プロジェクトのIDまたはURLエンコードされたパス
job_id整数。はいジョブのID。

リクエストの例

curl --request DELETE --header "PRIVATE-TOKEN: <your_access_token>" "https://gitlab.example.com/api/v4/projects/1/jobs/1/artifacts"
note
アーティファクトを削除するには、少なくともメンテナーのロールが必要です。

アーティファクトの削除に成功した場合、ステータス204 No Content の応答が返されます。

プロジェクトのアーティファクトの削除

  • GitLab 14.7 でbulk_expire_project_artifactsというフラグで導入されました。GitLabセルフマネージドではデフォルトで有効。GitLab.comで有効。
  • GitLab 14.10で機能フラグが削除されました。

削除可能なプロジェクトのアーティファクトを削除します。

デフォルトでは、各 ref の直近に成功したパイプラインのアーティファクトが保持されます。

DELETE /projects/:id/artifacts
属性種類必須説明
id整数/文字列はい プロジェクトのIDまたはURLエンコードされたパス

リクエストの例

curl --request DELETE --header "PRIVATE-TOKEN: <your_access_token>" "https://gitlab.example.com/api/v4/projects/1/artifacts"
note
アーティファクトを削除するには、少なくともメンテナーのロールが必要です。

削除可能なすべてのアーティファクトの有効期限を現在時刻に更新するようワーカーをスケジュールします。ステータス202 Accepted の応答が返されます。