アーティファクトのトラブルシューティング

ジョブ・アーティファクトを操作していると、次のようなイシューに遭遇することがあります。

ジョブが特定のアーティファクトを取得しない

デフォルトでは、ジョブは以前のステージからすべての成果物を取得しますが、dependencies またはneeds を使用するジョブは、デフォルトではすべてのジョブから成果物を取得しません。

これらのキーワードを使用すると、一部のジョブからのみ成果物がフェッチされます。これらのキーワードを使用してアーティファクトをフェッチする方法については、キーワード・リファレンスをレビューしてください:

ジョブ・アーティファクトのディスク容量が多すぎます。

ジョブ・アーティファクトのディスク容量が多すぎる場合は、ジョブ・アーティファクト管理ドキュメントを参照してください。

エラーメッセージNo files to upload

このメッセージは、Runnerがアップロードするファイルを見つけられない場合にジョブログに表示されます。ファイルへのパスが正しくないか、ファイルが作成されていません。ジョブログで、ファイル名と生成されなかった理由を特定する他のエラーや警告を確認できます。

より詳細なジョブログについては、CI/CD デバッグロギングを有効にしてジョブを再試行できます。このロギングによって、ファイルが生成されなかった理由についての詳細な情報が得られるかもしれません。

エラーメッセージMissing /usr/bin/gitlab-runner-helper. Uploading artifacts is disabled.

GitLab 15.2で導入されたGitLab RunnerはDEBUG の代わりにRUNNER_DEBUG を使用し、このイシューを修正しました。

GitLab 15.1 以前では、DEBUG という名前の CI/CD 変数を設定するとアーティファクトのアップロードに失敗することがありました。

これを回避するには

  • GitLab と GitLab Runner 15.2 にアップデートしてください。
  • 別の変数名を使用
  • script コマンドで環境変数として設定します:

     failing_test_job:  # This job might fail due to issue gitlab-org/gitlab-runner#3068
       variables:
         DEBUG: true
       script: bin/mycommand
       artifacts:
         paths:
           - bin/results
       
     successful_test_job:  # This job does not define a CI/CD variable named `DEBUG` and is not affected by the issue
       script: DEBUG=true bin/mycommand
       artifacts:
         paths:
           - bin/results
    

Windowsランナーでdotenvアーティファクトをアップロードする際のエラーメッセージFATAL: invalid argument

PowerShellecho コマンドは UCS-2 LE BOM (Byte Order Mark) エンコードでファイルを書き込みますが、サポートされているのは UTF-8 のみです。echodotenv アーティファクトを作成しようとすると、FATAL: invalid argument エラーが発生します。

代わりに、UTF-8 を使用する PowerShellAdd-Content を使用してください:

test-job:
  stage: test
  tags:
    - windows
  script:
    - echo "test job"
    - Add-Content -Path build.env -Value "MY_ENV_VAR=true"
  artifacts:
    reports:
      dotenv: build.env

ジョブのアーティファクトに期限はありません。

一部のジョブのアーティファクトが期待どおりに期限切れにならない場合は、以下の設定が有効になっているかどうかを確認してください。 最近成功したジョブのアーティファクトを保持設定が有効になっているかどうかを確認します。

この設定が有効な場合、各refの最新の成功したパイプラインからのジョブ・アーティファクトは期限切れにならず、削除されません。

エラーメッセージThis job could not start because it could not retrieve the needed artifacts.

needs:artifacts キーワードで設定されたジョブは、以下の場合に開始に失敗し、このエラーメッセー ジを返します:

  • ジョブの依存関係が見つかりません。
  • 権限が不足しているため、ジョブが関連リソースにアクセスできません。

トラブルシューティングの手順はジョブが使用する構文によって異なります:

で設定されたジョブの場合、以下のようになります。needs:project

needs:project 、以下のような設定でジョブを実行した場合、could not retrieve the needed artifacts. エラーが発生することがあります:

rspec:
  needs:
    - project: my-group/my-project
      job: dependency-job
      ref: master
      artifacts: true

このエラーをトラブルシューティングするには、以下を確認してください:

  • プロジェクトmy-group/my-project 、Premiumサブスクリプションプランを持つグループ内にあります。
  • ジョブを実行しているユーザーは、my-group/my-project のリソースにアクセスできます。
  • projectjobref の組み合わせが存在し、望ましい依存関係をもたらします。
  • 使用中の変数はすべて正しい値に評価されます。

で設定されたジョブの場合、以下のようになります。needs:pipeline:job

needs:pipeline:job 、以下のような設定でジョブを実行した場合、could not retrieve the needed artifacts. エラーが発生することがあります:

rspec:
  needs:
    - pipeline: $UPSTREAM_PIPELINE_ID
      job: dependency-job
      artifacts: true

このエラーをトラブルシューティングするには、以下を確認してください:

  • $UPSTREAM_PIPELINE_ID CI/CD変数が現在のパイプラインの親子パイプライン階層で利用可能であること。
  • pipelinejob の組み合わせが存在し、既存のパイプラインに解決されます。
  • dependency-job が実行され、正常に終了しました。