프로그래밍 노트/GIT

GitHub Actions 캐시(Cache)액션 활용하기

깡냉쓰 2023. 10. 19. 16:12
728x90
반응형
  • Cache 액션을 사용하면 GitHub Actions에서 workflow가 실행될 때, 잘 바뀌지 않는 파일들을 깃허브 캐시에 올려놓고 CI 서버로 내려받을 수 있음
  • 즉, workflow 성능 최적화에 도움이 됨
    • 의존하고 있는 라이브러리들을 매번 네트워크(원격 저장소)에서 받아 오는 것이 아닌 캐시에 저장해두고 활용

실습

  • react 프로젝트를 하나 생성하여 package.json에 있는 라이브러리들을 캐싱해보자

1. 테스트용 react-app 생성

$npx create-react-app actions-cache

2. Cache 적용 전 Actions 실행

cache.yml

name: cache workflow
on: push
jobs:
  cache:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v3
      - run: npm ci
  1. repository로 부터 checkout 받는다.
  2. package.json 에 명시된 라이브러리를 ci 서버에 다운받는다.
added 1527 packages, and audited 1528 packages in 19s
  • 1527 패키지가 추가되었고 19초 정도 소요된 것을 볼 수 있음

3. Cache 적용 후 Actions 실행

cache.yml

name: cache workflow
on: push
jobs:
  cache:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v3
      - uses: actions/cache@v3
        id: npm-cache
        with:
          path: ~/.npm # runner 내 파일 경로
          key: ${{ runner.os }}-node-${{ hashFiles('**/package-lock.json') }}
      - if: steps.npm-cache.outputs.cache-hit == 'true'
        run: echo 'npm cache hit!'
      - run: npm ci
  • 처음 Actions가 실행될 때 Cache가 존재하지 않기 때문에 Cache Action이 실행될때 로그가 찍힌다. (Run actions/cache@v3)
    • Cache not found for input keys: Linux-node-4ca97193f8aeda301bc1c90802ce16f3f1d86d64f9cbbe8bdb10ed825dc84202
    • Cache Key의 형태는 우리가 지정한 ${{ runner.os }}-node-${{ hashFiles('**/package-lock.json') }}
  • ~/.npm 으로 패키지가 모두 다운된 후 Cache에 적재된다. (Post Run actions/cache@v3)
    • Cache Size: ~43 MB (44639562 B)
    • Cache saved successfully
    • Cache saved with key: Linux-node-4ca97193f8aeda301bc1c90802ce16f3f1d86d64f9cbbe8bdb10ed825dc84202
  • Re-run을 하게 될시 적용된 cache를 불러온다. (Run actions/cache@v3)
    • Cache restored successfully
    • Cache restored from key: Linux-node-4ca97193f8aeda301bc1c90802ce16f3f1d86d64f9cbbe8bdb10ed825dc84202

Gradle의 의존성을 캐싱해보자.

- name: Gradle Caching
  uses: actions/cache@v3
  wtih:
    path: |
      ~/.gradle/caches
      ~/.gradle/wrapper
    key: ${{ runner.os }}-gradle-${{ hashFiles('**/*.gradle*', '**/gradle-wrapper.properties') }}
    restore-key: ${{ runner.os }}-gradle-

Cache Action 파라미터

- name: Cache
  uses: actions/cache@v3.3.2
  with:
    # A list of files, directories, and wildcard patterns to cache and restore
    path: 
    # An explicit key for restoring and saving the cache
    key: 
    # An ordered list of keys to use for restoring stale cache if no cache hit occurred for key. Note `cache-hit` returns false in this case.
    restore-keys: # optional
    # The chunk size used to split up large files during upload, in bytes
    upload-chunk-size: # optional
    # An optional boolean when enabled, allows windows runners to save or restore caches that can be restored or saved respectively on other platforms
    enableCrossOsArchive: # optional, default is false
    # Fail the workflow if cache entry is not found
    fail-on-cache-miss: # optional, default is false
    # Check if a cache entry exists for the given input(s) (key, restore-keys) without downloading the cache
    lookup-only: # optional, default is false

참고) https://www.daleseo.com/github-actions-jobs/

728x90
반응형