LoginSignup
1
0

More than 3 years have passed since last update.

CIでNuGetのキャッシュをするときは場所を明示的に指定する

Last updated at Posted at 2019-12-10

2020/3/27追記

actions/cacheのドキュメントに、記事の内容をマージしてもらいました。
https://github.com/actions/cache/pull/124


前回記事のGithub Actionsで.NET CoreのCI/CDを行うから、ジョブの高速化を図るためactions/cacheを使ったらハマったのでメモ。

TL:DR

  • CIの環境によっては、~/.nuget/packagesに色々入っていることがある
    • 該当フォルダをそのままキャッシュすると、プロジェクトに関係ない余計なものまで含まれる
  • NUGET_PACKAGES環境変数でNuGetキャッシュの場所を明示的に変更できる

現象

NuGetのキャッシュフォルダをキャッシュすることでdotnet restoreの時間を短縮しようと以下のようなキャッシュ処理を仕込んだ。

cache-step
- uses: actions/cache@v1
  with:
    path: ~/.nuget/packages
    key: nuget-${{ runner.os }}-${{ matrix.dotnet-version }}  # ex. nuget-Linux-3.0.101
    restore-keys: |
      nuget-${{ runner.os }}-

するとPost actions/cache@v1ステップ(キャッシュの保存処理)で、macos-latestの場合のみ4分以上かかるようになってしまった。

log
Post job cleanup.
/usr/bin/tar -cz -f /Users/runner/runners/2.161.0/work/_temp/4b80b621-20e0-4bf0-a201-22501682c69b/cache.tgz -C /Users/runner/.nuget/packages .
[warning]Cache size of ~4347 MB (4557940930 B) is over the 400MB limit, not saving cache.

該当部分のログ

~/.nuget/packagesがデカすぎるからキャッシュできない」と怒られる。

原因

Github Actionsのmacos-latestホストランナーには、標準でXamarinがインストールされている。
そのため、~/.nuget/packagesには、Xamarin関係のパッケージが起動時点で入っていることになる。
これらのパッケージまで含めてキャッシュしようとして、キャッシュサイズの上限(400MB)に引っかかっている模様。

actions/cacheのissueにも報告されている。

解決策

NuGetのパッケージをキャッシュするフォルダを明示的に指定する。
環境変数NUGET_PACKAGESにパスを指定することで、そのパスにキャッシュしてくれるようになる。

dotnetcore.yml
    env:
      NUGET_PACKAGES: ${{ github.workspace }}/.nuget/packages  # これを指定
    steps:
    - uses: actions/cache@v1
      with:
        path: ${{ github.workspace }}/.nuget/packages  # NUGET_PACKAGESと同じものを指定
        key: nuget-${{ runner.os }}-${{ matrix.dotnet-version }}
        restore-keys: |
          nuget-${{ runner.os }}-

修正後の実行結果(いろいろワークフローを変えた後ですが……。)

参考

1
0
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
1
0