ジョブアーティファクトのトラブルシューティング
- プラン: Free、Premium、Ultimate
- 提供形態: GitLab.com、GitLab Self-Managed、GitLab Dedicated
ジョブアーティファクトを使用するときに、次の問題が発生することがあります。
ジョブが特定のアーティファクトを取得しない
デフォルトでは、ジョブは前のステージからすべてのアーティファクトをフェッチしますが、dependenciesまたはneedsを使用するジョブでは、デフォルトでフェッチ対象のアーティファクトが限定されています。
これらのキーワードを使用する場合、アーティファクトは一部のジョブからのみフェッチされます。これらのキーワードでアーティファクトをフェッチする方法については、キーワードのリファレンスを確認してください。
ジョブアーティファクトがディスク容量を過剰に使用する
ジョブアーティファクトがディスク容量を過剰に使用している場合は、ジョブアーティファクトの管理ドキュメントを参照してください。
エラーメッセージNo files to upload(アップロードするファイルがありません)
このメッセージは、Runnerがアップロードするファイルを見つけられない場合にジョブログに表示されます。ファイルへのパスが間違っているか、ファイルが作成されていません。ジョブログを確認し、ファイル名と生成されなかった理由を示すその他のエラーまたは警告がないか探してください。
より詳細なジョブログを確認するには、CI/CDのデバッグログを有効にしてジョブを再試行してください。このログの生成により、ファイルが作成されなかった理由に関する詳細情報を得られる場合があります。
Windows Runnerでdotenvアーティファクトをアップロードする際のエラーメッセージFATAL: invalid argument(致命的なエラー: 無効な引数)
PowerShellのechoコマンドは、UCS-2 LE BOM(バイトオーダーマーク)エンコードでファイルを書き込みますが、サポートされているのはUTF-8のみです。そのため、echoでdotenvアーティファクトを作成しようとすると、FATAL: invalid argument(致命的なエラー: 無効な引数)エラーが発生します。
代わりに、UTF-8を使用するPowerShell Add-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.(このジョブは必要なアーティファクトを取得できなかったため開始できませんでした)
必要なアーティファクトをフェッチできなかった場合、ジョブは開始できず、このエラーメッセージを返します。このエラーは、次の場合に返されます。
- ジョブの依存関係が見つからない場合。デフォルトでは、後続ステージのジョブはすべての先行ステージのジョブからアーティファクトをフェッチするため、先行ジョブはすべて依存関係と見なされます。ジョブが
dependenciesキーワードを使用している場合は、リストに指定したジョブのみに依存します。 - アーティファクトがすでに期限切れになっている場合。
artifacts:expire_inで有効期限を延長できます。 - 権限不足のため、ジョブが関連リソースにアクセスできない場合。
ジョブが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のリソースにアクセスできる。 project、job、refの組み合わせが存在し、想定どおりの依存関係を構成している。- 使用している変数がすべて正しい値に評価される。
CI_JOB_TOKENを使用する場合は、そのトークンをプロジェクトの許可リストに追加することで、別のプロジェクトからアーティファクトをプルできるようにしてください。
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_IDCI/CD変数が、現在のパイプラインの親子パイプライン階層で使用できる。pipelineとjobの組み合わせが存在し、既存のパイプラインに解決される。dependency-jobが実行され、正常に完了している。
アップグレード後にジョブにUnlockPipelinesInQueueWorkerが表示される
ジョブが停止し、UnlockPipelinesInQueueWorkerというエラーが表示される場合があります。
この問題は、アップグレード後に発生します。
回避策は、ci_unlock_pipelines_extra_low機能フラグを有効にすることです。機能フラグを切り替えるには、管理者である必要があります。
GitLab SaaSの場合:
次のChatOpsコマンドを実行します。
/chatops run feature set ci_unlock_pipelines_extra_low true
GitLab Self-Managedの場合:
ci_unlock_pipelines_extra_low機能フラグを有効にします。
詳細については、マージリクエスト140318のコメントを参照してください。