ググってもすぐに原因がわらなかったので備忘録
結論
エラー内容そのまんまなんですが
Unable to reserve cache with key {KEY}, another job may be creating this cache.
というエラーが出たらそのキーはもう使えないので、新しいキーにしましょう。
原因
GitHub Actions/Cache の Post で下記のようなエラーが出た。
> Post job cleanup.
Unable to reserve cache with key Linux-2.6.6-cache-c0304304e, another job may be creating this cache.
原因は同じキャッシュキーを使ってキャッシュを初めて作った際に、アクセス権限などの理由でキャッシュがうまく作れなかったこと。
/bin/tar: {PATH}: Cannot open: Permission denied
/bin/tar: Exiting with failure status due to previous errors
Warning: Tar failed with error: The process '/bin/tar' failed with exit code 2
なので、利用しているキーはもう汚染されて使えない(少なくとも2週間ぐらい?)。
CircleCI などと違いGitHub Actions/Cacheは一度作られたキーのキャッシュを上書きしないので、汚染されるとそのキーの記録が残ってる限り使えないため。
エラーの分かりづらさ
このエラーの分かりづらいのは、キャッシュダウンロード時は
> Run actions/cache@v2
Cache not found for input keys: {KEY}, {RESTORE_KEYS}
と表示されて、キーがまだ使われてないかのように表示されるところ。
また、このエラーが出てもworkflowは成功してしまうところ。
対応策
エラーが出てしまって汚染されたらもう仕方がないので、根本的な対応策は結構難しい。
キャッシュ固有のバージョン番号のようなものを用意し、それをキャッシュキーに含めるようにするし、いつでもキーを変更し過去のキャッシュの使用をやめることができるのでそのようにすると良い。
job-name:
env:
GEM_CACHE_TAG: project:0.0.1
{...}
steps:
{...}
- name: Cache bundle gems
id: cache-bundle-gems
uses: actions/cache@v2
with:
path: ${{ env.GEMS_ARCHIVE_DIR }}
key: "${{ runner.os }}-${{ matrix.ruby }}-${{ env.GEM_CACHE_TAG }}-${{ hashFiles('Gemfile.lock') }}"
restore-keys: |
${{ runner.os }}-${{ matrix.ruby }}-${{ env.GEM_CACHE_TAG }}-