【问题标题】:Using GitHub cache action with multiple cache paths?使用具有多个缓存路径的 GitHub 缓存操作?
【发布时间】:2021-11-11 07:06:57
【问题描述】:

我正在尝试使用官方 GitHub 缓存操作 (https://github.com/actions/cache) 来缓存一些二进制文件以加快我的一些工作流程,但是在指定多个缓存路径时我无法让它工作。

这是我使用单个缓存路径设置的一个简单的工作测试: 有一种用于写入缓存的操作,一种用于读取缓存的操作(两者都在不同的工作流中执行,但在同一个存储库和分支上)。 write-action首先执行,并创建一个文件“subdir/a.txt”,然后用“actions/cache@v2”动作缓存:

    # Test with single path
    - name: Create file
      shell: bash
      run: |
        mkdir subdir
        cd subdir
        printf '%s' "Lorem ipsum" >> a.txt
        
    - name: Write cache (Single path)
      uses: actions/cache@v2
      with:
        path: "D:/a/cache_test/cache_test/**/*.txt"
        key: test-cache-single-path

read-action 检索缓存,递归打印目录中所有文件的列表以确认它已从缓存中恢复文件,然后打印缓存的 txt 文件的内容:

    - name: Get cached file
      uses: actions/cache@v2
      id: get-cache
      with:
        path: "D:/a/cache_test/cache_test/**/*.txt"
        key: test-cache-single-path
    
    - name: Print files
      shell: bash
      run: |
        echo "Cache hit: ${{steps.get-cache.outputs.cache-hit}}"
        cd "D:/a/cache_test/cache_test"
        ls -R
        cat "D:/a/cache_test/cache_test/subdir/a.txt"

这没有任何问题。

现在,缓存操作的描述包含一个指定多个缓存路径的示例:

  - uses: actions/cache@v2
    with:
      path: | 
        path/to/dependencies
        some/other/dependencies 
      key: ${{ runner.os }}-${{ hashFiles('**/lockfiles') }}

但是当我尝试对我的示例操作进行此操作时,它无法正常工作。 在新的写操作中,我创建了两个文件,“subdir/a.txt”和“subdir/b.md”,然后通过指定两个路径来缓存它们:

    # Test with multiple paths
    - name: Create files
      shell: bash
      run: |
        mkdir subdir
        cd subdir
        printf '%s' "Lorem ipsum" >> a.txt
        printf '%s' "dolor sit amet" >> b.md

    #- name: Write cache (Multi path)
      uses: actions/cache@v2
      with:
        path: |
          "D:/a/cache_test/cache_test/**/*.txt"
          "D:/a/cache_test/cache_test/**/*.md"
        key: test-cache-multi-path

新的读取操作与旧的相同,但同时指定了两个路径:

    # Read cache
    - name: Get cached file
      uses: actions/cache@v2
      id: get-cache
      with:
        path: |
          "D:/a/cache_test/cache_test/**/*.txt"
          "D:/a/cache_test/cache_test/**/*.md"
        key: test-cache-multi-path
    
    - name: Print files
      shell: bash
      run: |
        echo "Cache hit: ${{steps.get-cache.outputs.cache-hit}}"
        cd "D:/a/cache_test/cache_test"
        ls -R
        cat "D:/a/cache_test/cache_test/subdir/a.txt"
        cat "D:/a/cache_test/cache_test/subdir/b.md"

这次我仍然得到缓存已被读取的确认:

Cache restored successfully
Cache restored from key: test-cache-multi-path
Cache hit: true

但是“ls -R”没有列出文件,并且“cat”命令失败,因为文件不存在。

我的错误在哪里?使用缓存操作指定多个路径的正确方法是什么?

【问题讨论】:

    标签: windows caching github-actions


    【解决方案1】:

    我能够通过一些修改使其工作;

    • 使用相对路径而不是绝对路径
    • 使用内容的哈希作为键

    至少 bash 看起来绝对路径是这样的:

    • /d/a/so-foobar-cache/so-foobar-cache/cache_test/cache_test/subdir

    so-foobar-cache 是存储库的名称。

    .github/workflows/foobar.yml

    
    name: Store and Fetch cached files
    on: [push]
    jobs:
      store:
        runs-on: windows-2019
        steps:
          - name: Create files
            shell: bash
            id: store
            run: |
              mkdir -p 'cache_test/cache_test/subdir'
              cd 'cache_test/cache_test/subdir'
              echo pwd $(pwd)
              printf '%s' "Lorem ipsum" >> a.txt
              printf '%s' "dolor sit amet" >> b.md
              cat a.txt b.md
          - name: Store in cache
            uses: actions/cache@v2
            with:
              path: |
                cache_test/cache_test/**/*.txt
                cache_test/cache_test/**/*.md
              key: multiple-files-${{ hashFiles('cache_test/cache_test/**') }}
          - name: Print files (A)
            shell: bash
            run: |
              echo "Cache hit: ${{steps.store.outputs.cache-hit}}"
              find cache_test/cache_test/subdir
              cat cache_test/cache_test/subdir/a.txt
              cat cache_test/cache_test/subdir/b.md
    
    
      fetch:
        runs-on: windows-2019
        needs: store
        steps:
          - name: Restore
            uses: actions/cache@v2
            with:
              path: |
                cache_test/cache_test/**/*.txt
                cache_test/cache_test/**/*.md
              key: multiple-files-${{ hashFiles('cache_test/cache_test/**') }}
              restore-keys: |
                multiple-files-${{ hashFiles('cache_test/cache_test/**') }}
                multiple-files-
          - name: Print files (B)
            shell: bash
            run: |
              find cache_test -type f | xargs -t grep -e.
    

    日志

    $ gh run view 1446486801 
    
    ✓ master Store and Fetch cached files · 1446486801
    Triggered via push about 3 minutes ago
    
    JOBS
    ✓ store in 5s (ID 4171907768)
    ✓ fetch in 10s (ID 4171909690)
    

    第一份工作

    $ gh run view 1446486801 --log --job=4171907768 | grep -e Create  -e Store -e Print
    store   Create files    2021-11-10T22:59:32.1396931Z ##[group]Run mkdir -p 'cache_test/cache_test/subdir'
    store   Create files    2021-11-10T22:59:32.1398025Z mkdir -p 'cache_test/cache_test/subdir'
    store   Create files    2021-11-10T22:59:32.1398695Z cd 'cache_test/cache_test/subdir'
    store   Create files    2021-11-10T22:59:32.1399360Z echo pwd $(pwd)
    store   Create files    2021-11-10T22:59:32.1399936Z printf '%s' "Lorem ipsum" >> a.txt
    store   Create files    2021-11-10T22:59:32.1400672Z printf '%s' "dolor sit amet" >> b.md
    store   Create files    2021-11-10T22:59:32.1401231Z cat a.txt b.md
    store   Create files    2021-11-10T22:59:32.1623649Z shell: C:\Program Files\Git\bin\bash.EXE --noprofile --norc -e -o pipefail {0}
    store   Create files    2021-11-10T22:59:32.1626211Z ##[endgroup]
    store   Create files    2021-11-10T22:59:32.9569082Z pwd /d/a/so-foobar-cache/so-foobar-cache/cache_test/cache_test/subdir
    store   Create files    2021-11-10T22:59:32.9607728Z Lorem ipsumdolor sit amet
    store   Store in cache  2021-11-10T22:59:33.9705422Z ##[group]Run actions/cache@v2
    store   Store in cache  2021-11-10T22:59:33.9706196Z with:
    store   Store in cache  2021-11-10T22:59:33.9706815Z   path: cache_test/cache_test/**/*.txt
    store   Store in cache  cache_test/cache_test/**/*.md
    store   Store in cache  
    store   Store in cache  2021-11-10T22:59:33.9708499Z   key: multiple-files-25c0e6413e23766a3681413625169cee1ca3a7cd2186cc1b1df5370fb43bce55
    store   Store in cache  2021-11-10T22:59:33.9709961Z ##[endgroup]
    store   Store in cache  2021-11-10T22:59:35.1757943Z Received 260 of 260 (100.0%), 0.0 MBs/sec
    store   Store in cache  2021-11-10T22:59:35.1761565Z Cache Size: ~0 MB (260 B)
    store   Store in cache  2021-11-10T22:59:35.1781110Z [command]C:\Windows\System32\tar.exe -z -xf D:/a/_temp/653f7664-e139-4930-9710-e56942f9fa47/cache.tgz -P -C D:/a/so-foobar-cache/so-foobar-cache
    store   Store in cache  2021-11-10T22:59:35.2069751Z Cache restored successfully
    store   Store in cache  2021-11-10T22:59:35.2737840Z Cache restored from key: multiple-files-25c0e6413e23766a3681413625169cee1ca3a7cd2186cc1b1df5370fb43bce55
    store   Print files (A) 2021-11-10T22:59:35.3087596Z ##[group]Run echo "Cache hit: "
    store   Print files (A) 2021-11-10T22:59:35.3088324Z echo "Cache hit: "
    store   Print files (A) 2021-11-10T22:59:35.3088983Z find cache_test/cache_test/subdir
    store   Print files (A) 2021-11-10T22:59:35.3089571Z cat cache_test/cache_test/subdir/a.txt
    store   Print files (A) 2021-11-10T22:59:35.3090176Z cat cache_test/cache_test/subdir/b.md
    store   Print files (A) 2021-11-10T22:59:35.3104465Z shell: C:\Program Files\Git\bin\bash.EXE --noprofile --norc -e -o pipefail {0}
    store   Print files (A) 2021-11-10T22:59:35.3106449Z ##[endgroup]
    store   Print files (A) 2021-11-10T22:59:35.3494703Z Cache hit: 
    store   Print files (A) 2021-11-10T22:59:35.4456032Z cache_test/cache_test/subdir
    store   Print files (A) 2021-11-10T22:59:35.4456852Z cache_test/cache_test/subdir/a.txt
    store   Print files (A) 2021-11-10T22:59:35.4459226Z cache_test/cache_test/subdir/b.md
    store   Print files (A) 2021-11-10T22:59:35.4875011Z Lorem ipsumdolor sit amet
    store   Post Store in cache 2021-11-10T22:59:35.6109511Z Post job cleanup.
    store   Post Store in cache 2021-11-10T22:59:35.7899690Z Cache hit occurred on the primary key multiple-files-25c0e6413e23766a3681413625169cee1ca3a7cd2186cc1b1df5370fb43bce55, not saving cache.
    
    

    第二份工作

    $ gh run view 1446486801 --log --job=4171909690  | grep -e Restore -e Print
    fetch   Restore 2021-11-10T22:59:50.8498516Z ##[group]Run actions/cache@v2
    fetch   Restore 2021-11-10T22:59:50.8499346Z with:
    fetch   Restore 2021-11-10T22:59:50.8499883Z   path: cache_test/cache_test/**/*.txt
    fetch   Restore cache_test/cache_test/**/*.md
    fetch   Restore 
    fetch   Restore 2021-11-10T22:59:50.8500449Z   key: multiple-files-
    fetch   Restore 2021-11-10T22:59:50.8501079Z   restore-keys: multiple-files-
    fetch   Restore multiple-files-
    fetch   Restore 
    fetch   Restore 2021-11-10T22:59:50.8501644Z ##[endgroup]
    fetch   Restore 2021-11-10T22:59:53.1143793Z Received 257 of 257 (100.0%), 0.0 MBs/sec
    fetch   Restore 2021-11-10T22:59:53.1145450Z Cache Size: ~0 MB (257 B)
    fetch   Restore 2021-11-10T22:59:53.1163664Z [command]C:\Windows\System32\tar.exe -z -xf D:/a/_temp/30b0dc24-b25f-4713-b3d3-cecee7116785/cache.tgz -P -C D:/a/so-foobar-cache/so-foobar-cache
    fetch   Restore 2021-11-10T22:59:53.1784328Z Cache restored successfully
    fetch   Restore 2021-11-10T22:59:53.5197756Z Cache restored from key: multiple-files-
    fetch   Print files (B) 2021-11-10T22:59:53.5483939Z ##[group]Run find cache_test -type f | xargs -t grep -e.
    fetch   Print files (B) 2021-11-10T22:59:53.5484730Z find cache_test -type f | xargs -t grep -e.
    fetch   Print files (B) 2021-11-10T22:59:53.5498140Z shell: C:\Program Files\Git\bin\bash.EXE --noprofile --norc -e -o pipefail {0}
    fetch   Print files (B) 2021-11-10T22:59:53.5498674Z ##[endgroup]
    fetch   Print files (B) 2021-11-10T22:59:55.8119800Z grep -e. cache_test/cache_test/subdir/a.txt cache_test/cache_test/subdir/b.md
    fetch   Print files (B) 2021-11-10T22:59:56.1777887Z cache_test/cache_test/subdir/a.txt:Lorem ipsum
    fetch   Print files (B) 2021-11-10T22:59:56.1784138Z cache_test/cache_test/subdir/b.md:dolor sit amet
    fetch   Post Restore    2021-11-10T22:59:56.3890391Z Post job cleanup.
    fetch   Post Restore    2021-11-10T22:59:56.5481739Z Cache hit occurred on the primary key multiple-files-, not saving cache.
    
    

    【讨论】:

      猜你喜欢
      • 2021-01-21
      • 2020-12-19
      • 1970-01-01
      • 2021-10-04
      • 2020-03-26
      • 2022-07-12
      • 2022-12-14
      • 1970-01-01
      相关资源
      最近更新 更多