キャッシュの復元が "Permission Denied" で失敗する

Workflow を使用し、キャッシュの保存と復元 Workspace の恒久化を行なう場合、ユーザーとディレクトリが関係することに留意してください。 CircleCI のビルド済み Docker イメージを使用する場合、各 Docker コンテナは同じユーザーで、同じベースアクセス許可を使用して実行されます。 1 つのイメージを使用するジョブにキャッシュを保存し、別のジョブに復元する場合、アクセス許可が互換であることを確認してください。

 

キャッシュの復元時に "Permission Denied" というエラーが表示される場合、以前のジョブで保存した場所を確認します。 この一般的な状況は、イメージをルートユーザーとして使用し、キャッシュを保存してから、ルートアクセス許可のないユーザーが、以後のジョブにそのキャッシュの復元を試みたときです。

また、同じエラーによって、恒久化された Workspace のファイルも、アクセス許可が正しく設定されていなければ消失します。

Untitled.png

 

この `キャッシュ復元` のステップでは、元のイメージはルートとして実行されており、作業ディレクトリが `~/tmp` に設定されていたため、キャッシュが元は `/root/tmp` に保存されたことが分かります。 Workflow のこの部分は、CircleCI ユーザー下で実行され、`/root` フォルダーにアクセスできません。

 

可能なら、複数のジョブ間で同じイメージを使用してください。 それが難しい場合は、2 つのイメージ間で共通の場所に作業ディレクトリを設定してください (`/tmp` が使用できることがあります)。 また、キャッシュを保存する前に、ファイルのアクセス許可を変更または設定する必要があります。

例:`chmod -R 777 ./workingDirectory` を使用して、これらのファイルに対する完全な読み取り/書き込みアクセス権を付与します。

 

ベストな方法は、ジョブ間で共通のイメージを使用することです。 CircleCI で提供しているビルド済み Docker イメージに、プロジェクトに必要な要素が欠けている場合、CircleCI 製イメージの 1 つをカスタマイズすることを検討してください。

 

この記事は役に立ちましたか?
0人中0人がこの記事が役に立ったと言っています

コメント

0件のコメント

ログインしてコメントを残してください。