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
Reference
이 문제에 관하여(Yarn을 사용하여 GitHub 작업에서 node_modules를 캐시하는 방법), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/mattpocockuk/how-to-cache-nodemodules-in-github-actions-with-yarn-24eh텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)