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
- repository로 부터 checkout 받는다.
- 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
728x90
반응형
'프로그래밍 노트 > GIT' 카테고리의 다른 글
GitHub Actions 그레들 multi module 변경사항만 실행시키기 (0) | 2024.07.18 |
---|---|
GitHub Actions 훑어보기(구성요소) (0) | 2023.10.19 |
revert 후 merge 할 때 유의 사항 (1) | 2022.09.20 |
Git branch 정리 관련(PR) (0) | 2021.08.02 |
[Git] 스테이시(stash)에 보관하기 (0) | 2021.01.20 |