无法在Docker容器中恢复在`ubuntu-latest`中创建的缓存 [英] Cache created in `ubuntu-latest` cannot be restored in Docker container

查看:2
本文介绍了无法在Docker容器中恢复在`ubuntu-latest`中创建的缓存的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

这是我的工作流文件:

name: Build Pipeline
on: push
env:
  NODE_VERSION: 11

jobs:
  build:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v2
      - uses: actions/setup-node@v2
        with:
          node-version: ${{ env.NODE_VERSION }}
      - id: cache-node-modules
        uses: actions/cache@v2
        with:
          path: ${{ github.workspace }}/node_modules
          key: node_modules-${{ hashFiles('package-lock.json') }}
          restore-keys: node_modules
      - uses: actions/cache@v2
        with:
          path: ${{ github.workspace }}/build
          key: build-${{ github.sha }}
          restore-keys: build
      - if: steps.cache-node-modules.outputs.cache-hit != 'true'
        run: npm install
      - run: npm run build -- --incremental
  npm-scripts:
    needs: [build]
    runs-on: ubuntu-latest
    strategy:
      matrix:
        script: ['lint:pipeline', 'lint:exports', 'i18n:pipeline', 'schema:validate']
    steps:
      - uses: actions/checkout@v2
      - uses: actions/setup-node@v2
        with:
          node-version: ${{ env.NODE_VERSION }}
      - id: cache-node-modules
        uses: actions/cache@v2
        with:
          path: ${{ github.workspace }}/node_modules
          key: node_modules-${{ hashFiles('package-lock.json') }}
      - if: steps.cache-node-modules.outputs.cache-hit != 'true'
        run: |
          echo 'Expected to have a cache hit for "node_modules", since this job runs after the "build" job, which caches the latest version of "node_modules". Not having a cache hit means probably there is a bug with the workflow file.'
          exit 1
      - id: cache-build-output
        uses: actions/cache@v2
        with:
          path: ${{ github.workspace }}/build
          key: build-${{ github.sha }}
      - if: steps.cache-build-output.outputs.cache-hit != 'true'
        run: |
          echo 'Expected to have a cache hit for the build output folder, since this job runs after the "build" job, which caches the latest version of the "build" folder. Not having a cache hit means probably there is a bug with the workflow file.'
          exit 1
      - run: npm run ${{ matrix.script }}
  jest-tests:
    needs: [build]
    runs-on: ubuntu-latest
    container: node:11
    services:
      postgres:
        image: postgres
        env:
          POSTGRES_DB: localhost
          POSTGRES_USER: postgres
          POSTGRES_PASSWORD: password
      redis:
        image: redis
    steps:
      - uses: actions/checkout@v2
      - id: cache-node-modules
        uses: actions/cache@v2
        with:
          path: ${{ github.workspace }}/node_modules
          key: node_modules-${{ hashFiles('package-lock.json') }}
      - if: steps.cache-node-modules.outputs.cache-hit != 'true'
        run: |
          echo 'Expected to have a cache hit for "node_modules", since this job runs after the "build" job, which caches the latest version of "node_modules". Not having a cache hit means probably there is a bug with the workflow file.'
          exit 1
      - id: cache-build-output
        uses: actions/cache@v2
        with:
          path: ${{ github.workspace }}/build
          key: build-${{ github.sha }}
      - if: steps.cache-build-output.outputs.cache-hit != 'true'
        run: |
          echo 'Expected to have a cache hit for the build output folder, since this job runs after the "build" job, which caches the latest version of the "build" folder. Not having a cache hit means probably there is a bug with the workflow file.'
          exit 1
      - run: echo
node_modulesbuild文件夹缓存在build作业中。这些缓存能够在npm-scripts作业中恢复,不会出现问题。但是,它们无法在jest-tests作业中还原,该作业会出现Cache not found for input keys错误。

我不知道这是怎么可能的,因为在所有npm-scripts作业中都可以毫无问题地还原完全相同的缓存键。

当我删除:

container: node:11
services:
  postgres:
    image: postgres
    env:
      POSTGRES_DB: localhost
      POSTGRES_USER: postgres
      POSTGRES_PASSWORD: password
  redis:
    image: redis

部分(因此让作业在ubuntu-latest上运行,而不是在Docker容器上运行),缓存能够再次正确恢复。所以不确定这是怎么回事。

推荐答案

这是一个奇怪的错误。我发现的解决方法不是在容器中运行jest-tests作业。也就是说,在常规的ubuntu-latest机器上运行jest-tests作业,并映射服务容器端口,如下所示:

jest-tests:
  needs: [build]
  runs-on: ubuntu-latest
  services:
    postgres:
      image: postgres
      ports:
        - 5432:5432
      env:
        POSTGRES_DB: localhost
        POSTGRES_USER: postgres
        POSTGRES_PASSWORD: password
    redis:
      image: redis
      ports:
        - 6379:6379

这篇关于无法在Docker容器中恢复在`ubuntu-latest`中创建的缓存的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆