Yarn을 사용하여 GitHub 작업에서 node_modules를 캐시하는 방법

4654 단어 githubjavascriptnode

문제



성장하는 단일 저장소에서 작업하는 소규모 팀을 운영합니다. 모든 커밋, 일부 CI 검사는 GitHub 작업에서 전체 코드베이스에서 실행됩니다. 확인을 완료하는 데 ~8분이 걸렸습니다. 우리는 그들이 더 빨리 실행되기를 원했습니다.

우리는 종속성을 관리하기 위해 얀 작업 공간을 사용하므로 루트에 단일 얀 설치로 모든 클라이언트에 대한 종속성을 설치하기에 충분합니다.

문제는 이 원사 설치가 CI에서 4.5분 정도 걸렸다는 것입니다. 노드 모듈이 이미 저장되어 있는 내 로컬 컴퓨터에서는 5초도 걸리지 않습니다. CI 속도를 높이고 싶었습니다.

내가 시도한 첫 번째 일



GitHub 작업은 원사 캐시를 캐시할 것을 권장합니다. 즉, 다음과 같은 2단계로 끝납니다.

- name: Get yarn cache directory path
  id: yarn-cache-dir-path
  run: echo "::set-output name=dir::$(yarn cache dir)"

- uses: actions/cache@v2
  id: yarn-cache # use this to check for `cache-hit` (`steps.yarn-cache.outputs.cache-hit != 'true'`)
  with:
    path: ${{ steps.yarn-cache-dir-path.outputs.dir }}
    key: ${{ runner.os }}-yarn-${{ hashFiles('**/yarn.lock') }}
    restore-keys: |
      ${{ runner.os }}-yarn-


첫 번째 단계는 원사 캐시 디렉토리 경로를 가져와서 저장합니다. 두 번째 단계는 캐시에 저장된 모든 항목을 찾아 복원합니다.

이로 인해 작업 속도가 약간 빨라졌지만 내가 원하는 높이에 도달하지 못했습니다.

해결책



원사 캐시를 캐싱하는 대신 node_modules를 캐싱해야 합니다.

- uses: actions/cache@v2
  with:
    path: '**/node_modules'
    key: ${{ runner.os }}-modules-${{ hashFiles('**/yarn.lock') }}


이렇게 하면 리포지토리 전체에서 모든 node_modules 폴더를 캐시하고 yarn.lock 파일이 변경될 때마다 캐시를 ​​무효화합니다.

이것은 우리의 단일 저장소에서 작동하며 단일 폴더 프로젝트에서도 작동해야 합니다.

이렇게 하면 설치 단계가 ~4.5분에서 ~30초로 단축되었습니다.

전체 스니펫




name: Automated Tests and Linting

on: [push]

jobs:
  lint:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v1

      - uses: actions/cache@v2
        with:
          path: '**/node_modules'
          key: ${{ runner.os }}-modules-${{ hashFiles('**/yarn.lock') }}

      - name: Install packages
        run: yarn install

      - name: Autogenerate GraphQL
        run: yarn codegen

      - name: Run Typescript Checks
        run: yarn lint

      - name: Run Tests
        run: yarn test:ci

좋은 웹페이지 즐겨찾기