artifact
caching
comparing artifacts and dependency caching
artifact
workflow에 속한 job들은 각각 분리된 runner에서 실행되므로 기본적으로 데이터를 공유할 수 없다
artifact(파일 또는 컬렉션 파일 - zip)는 job이 완료된 후 데이터를 영속할 수 있는 기능과 동일한 workflow에서 다른 job에게 데이터를 공유할 수 있는 기능을 제공한다 (모든 actions와 workflows는 해당 실행하는 아티팩트에 대한 쓰기 권한을 가진다)
또한 workflowr가 끝난 후 아티팩트는 github 서버에 저장되어 다운로드할 수 있다
주요 사용 예시
로그 파일/코어 덤프
테스트 결과, 실패/스크린샷
바이너리 또는 복합 파일
스트레스 테스트 성능 출력/코드 커버리지 결과
upload-artifact, download-artifact
github는 아티팩트를 업로드/다운로드할 수 있는 두 개의 actions를 제공한다
upload-artifact
job이 끝나기 전 파일 이름과 데이터를 기반으로 파일을 업로드하는 액션
retention-day를 통해 아티팩트 유지 기간을 설정할 수 있다 (최대 유지 기간을 넘어서 설정할 수 없다)
job에서 업로드한 파일은 github actions 탭의 해당 workflow에서 확인할 수 있다
# 첫 번째 아티팩트 업로드
- name: Archive production artifacts
uses: actions/upload-artifact@v4
with:
name: dist-without-markdown
path: |
dist
!dist/**/*.md
retention-days: 5 # 아티팩트 유지 기간 설정
# 두 번째 아티팩트 업로드
- name: Archive code coverage results
uses: actions/upload-artifact@v4
with:
name: code-coverage-report
path: output/test/code-coverage.html
download-artifact
동일한 workflow 실행 중 업로드된 아티팩트를 다운받는 액션, 파일 이름으로 아티팩트를 참조할 수 있다
파일 이름을 명시하지 않으면 이전 job에서 업로드한 모든 아티팩트를 다운로드한다
# 특정 아티팩트 다운로드
- name: Download a single artifact
uses: actions/download-artifact@v4
with:
name: my-artifact
# 모든 아티팩트 다운로드
- name: Download all workflow run artifacts
uses: actions/download-artifact@v4
artifact 보관 정책
기본적으로 아티팩트는 github 서버에 90일 동안 보관된다
artifact action example
name: share data between jobs
on: [push]
jobs:
# math-homework.txt 파일을 homework_pre 이름으로 업로드
job_1:
name: add 3 and 7
runs-on: ubuntu-latest
steps:
- shell: bash
run: |
expr 3 + 7 > math-homework.txt
- name: upload math result for job 1
uses: actions/upload-artifact@v4
with:
name: homework_pre
path: math-homework.txt
# homework_pre를 다운받고 값을 수정한 math-homework.txt 파일을 homework_final 이름으로 업로드
job_2:
name: multiply by 9
needs: job_1 # 작업 순서 지정: job 1 -> job 2
runs-on: windows-latest
steps:
- name: download math result job 1
uses: actions/download-artifact@v4
with:
name: homework_pre
- shell: bash
run: |
value=`cat math-homework.txt`
expr $value \* 9 > math-homework.txt
- name: upload math result for job 2
uses: actions/upload-artifact@v4
with:
name: homework_final
path: math-homework.txt
# homework_final을 다운받고 출력
job_3:
name: display results
needs: job_2 # 작업 순서 지정: job 2 -> job 3
runs-on: macos-latest
steps:
- name: download math results for job 2
uses: actions/download-artifact@v4
with:
name: homework_final
- name: print the final result
shell: bash
run: |
value=`cat math-homework.txt`
echo the result is $value
caching
github actions에서 자주 사용하는 파일(의존성, 특정 출력)을 저장하여 workflow 속도를 향상시키는 github action이다
기본적으로 workflow의 각 job은 github-hosted runner에서 실행되며 각 runner는 새 프로비저닝된 상태에서 시작하기 때문에 매번 의존성을 다운로드받는다
cache action을 사용하면 package manager (maven/gradle, poetry, npm 등)을 캐시하여 job에서 사용하는 의존성을 캐시하여 효율적으로 workflow를 실행할 수 있다
주의점
read 권한이 있는 계정은 리포지토리 풀 리퀘스트를 생성하고 캐시 컨텐츠에 접근할 수 있다
마찬가지로 fork한 리포지토리에서 base 브랜치에 풀 리퀘스트를 생성하고 캐시 컨텐츠에 접근할 수 있기 때문에 cache에 인증 토큰, 로그인 crendentials 같은 민감한 정보를 넣지 말아야 한다
또한 self-hosted runner를 사용해도 workflow 실행의 캐시는 github 자체 서버에 저장되며 github enterprise server에서만 자체 서버에 저장할 수 있다
cache action
cache action은 설정한 key를 기반으로 캐시를 찾으려고 시도한다
완벽히 매치되는 키가 있는 경우
- cache hit
- cache action은 설정된 path에 캐시된 파일을 찾는다
완벽히 매치되는 키가 하나도 없는 경우
- cache miss
- restore-keys가 설정된 경우 해당 키들로 캐시를 찾으려고 시도한다
- cache action은 job이 성공적으로 실행되면 자동적으로 새 캐시를 생성하고 설정된 path 저장한다
cache action 입력 파라미터
필수 입력 파라미터
key
- 캐시를 저장하고 되찾을 때 사용되는 키 값
- 변수, context values, static strings, functions 등을 조합하여 키를 만들 수 있다
- 키는 최대 512 character 길이를 가질 수 있으며 이보다 긴 키를 가진 경우 action이 실패한다
path
- runner에서 캐시를 저장하고 되찾을 경로
- 하나 이상의 경로를 지정할 수 있다
- 디렉토리 또는 단일 파일을 지정할 수 있으며 glob 패턴을 사용할 수도 있다
- 절대 경로와 상대 경로(workspace 디렉토리 기준) 모두 지원한다
- name: Cache Gradle Packages
uses: actions/cache@v4
with:
path: |
~/.gradle/caches
~/.gradle/wrapper
선택 입력 파라미터
restore-keys
- cache-hit이 되지 않은 경우 캐시를 찾을 후보 키 값들
- 각 라인에 설정된 값이 하나의 restore-key이며 순차적으로 사용되서 캐시를 찾으려고 시도한다
- 정확히 매치되는 캐시가 있는 경우 path 디렉토리에 저장된 캐시를 되찾는다
- 정확히 매치되는 캐시가 없는 경우 restore key와 부분적으로 매치되는 캐시가 있는지 찾는다 -> 만약 부분 매치되는 캐시가 있다면 그 중 가장 최신 캐시를 가져온다
restore-keys: |
npm-feature-$
npm-feature-
npm-
enableCrossOsArchive
- boolean 값(default: false)
- 활성화하면 windows runner가 운영체제에 상관없이 생성된 캐시를 저장하고 찾는다
cache action 출력 파라미터
cache-hit: key 값에 완전히 매치되는 캐시를 찾은 경우 true
managing caches
comparing artifacts and dependency caching
caching: workflow 또는 job 실행 간 변경되지 않는 파일을 재사용하는 경우 사용
artifacts: workflow 또는 job 실행 후 제공된 파일을 저장하고 싶은 경우 사용