LoginSignup
2
1

More than 3 years have passed since last update.

GitHub Actions/Cache "Unable to reserve cache with key {KEY}, another job may be creating this cache." エラー

Last updated at Posted at 2020-12-29

ググってもすぐに原因がわらなかったので備忘録

結論

エラー内容そのまんまなんですが

Unable to reserve cache with key {KEY}, another job may be creating this cache.

というエラーが出たらそのキーはもう使えないので、新しいキーにしましょう。

原因

GitHub Actions/Cache の Post で下記のようなエラーが出た。

キャッシュ作成(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は成功してしまうところ。

対応策

エラーが出てしまって汚染されたらもう仕方がないので、根本的な対応策は結構難しい。

キャッシュ固有のバージョン番号のようなものを用意し、それをキャッシュキーに含めるようにするし、いつでもキーを変更し過去のキャッシュの使用をやめることができるのでそのようにすると良い。

ci.yaml
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 }}-
2
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
1