[GitHub Actions] actions artifact 기능을 통한 데이터 공유 및 저장
[GitHub Actions] actions artifact 기능을 통한 데이터 공유 및 저장
GitHub Actions의 workflow는 소프트웨어 개발 과정에서 자동화된 작업을 정의합니다. 이를 통해 코드 푸시, 풀 요청 또는 다른 GitHub 이벤트에 반응하여 테스트, 빌드, 배포와 같은 CI/CD 작업을 실행할 수 있습니다.
GitHub Actions에는 CI/CD 작업을 위해 다양한 기능이 있으며 이번에 테스트할 기능은 actions/upload-artifact, actions/download-artifact 기능입니다. actions/upload-artifact, actions/download-artifact 기능은 workflow 동안 생성된 파일이나 디렉토리 등을 저장하고 활용할 수 있도록 해줍니다.
개요
GitHub Actions의 actions/upload-artifact는 workflow 실행 중에 생성된 파일이나 데이터를 GitHub에 업로드하여 저장하는 기능입니다. 이를 통해 작업이 끝난 후에도 데이터를 보존하고 사용할 수 있습니다.
actions/download-artifact는 저장된 아티팩트를 나중에 다운로드할 수 있게 해주어, 같은 workflow 내의 이후 작업에서 데이터를 사용하거나 공유할 수 있게 해줍니다.
이 두 기능을 통해 CI/CD 파이프라인에서 빌드 결과나 테스트 결과와 같은 중요한 데이터를 관리하고 전달할 수 있습니다.
- name: Upload Artifact text_dir
uses: actions/upload-artifact@v4
with:
name: text_dir-artifact
path: text_dir
- name: Download Artifact text_dir
uses: actions/download-artifact@v4
with:
name: text_dir-artifact
사용 범위 및 제한 사항
사용 범위
- workflow가 생성한 파일이나 디렉토리를 아티팩트로 업로드하여, GitHub에서 호스팅하는 동안 해당 데이터를 보존합니다.
- 빌드 결과, 로그 파일, 테스트 결과, 바이너리 파일 등의 저장에 사용됩니다.
- 이미 업로드된 아티팩트를 다운로드하여 workflow가 완료된 후에도 아티팩트를 활용할 수 있습니다.
제한 사항
- 아티팩트의 기본 보관 기간은 90일입니다. 이 기간은 설정을 통해 조정할 수 있으나, 최대 90일로 제한됩니다.
- 저장 공간과 데이터 전송량은 GitHub Actions의 사용 한도에 포함되어 비용에 청구됩니다.
- workflow 실행 단위로 아티팩트를 관리하며, 이전 워크플로우 실행에서 생성된 아티팩트를 다운로드할 수는 없습니다.
- workflow 실행의 각 작업에는 아티팩트가 500개로 제한됩니다.
artifact vs cache 간단 비교
아티팩트와 캐싱은 GitHub에 파일을 저장하는 기능을 제공한다는 점에서 유사하지만 각 기능은 서로 다른 사용 사례를 제공하며 서로 바꿔서 사용할 수 없습니다.
- 패키지 관리 시스템의 빌드 종속성과 같이 작업이나 워크플로 실행 간에 자주 변경되지 않는 파일을 재사용하려는 경우 캐싱을 사용합니다.
- 워크플로 실행이 종료된 후 보기 위해 작업에서 생성된 파일(예: 빌드된 바이너리 또는 빌드 로그)을 저장하려는 경우 아티팩트를 사용합니다.
예시 코드
예시 코드의 workflow는 push 이벤트가 발생할 때마다 실행되도록 설정하였습니다. 또한 두 개의 작업(Job)을 구성하여 첫 번째 작업에서 파일을 저장하고, 두 번째 작업에서 저장 파일을 사용하도록 구성하였습니다.
actions/upload-artifact 코드
jobs:
Jobs-Names-actions_artifact_demo-01:
runs-on: ubuntu-latest
steps:
- name: Make text_dir
run: mkdir text_dir
- name: Create File
run: touch text_dir/test-$(date "+%H%M%S")-01
- name: Check File
run: ls -al text_dir/*
- name: Upload Artifact text_dir
uses: actions/upload-artifact@v4
with:
name: text_dir-artifact
path: text_dir/**
retention-days: 5
mkdir
명령어와 touch
명령어를 통해 text_dir
디렉토리에 파일을 생성하였습니다.
생성한 파일은 actions/upload-artifact 기능을 통해 아티팩트로 저장하였습니다.name
설정으로 저장되는 아티팩트 이름을 지정하고, path
설정으로 경로를 지정하였습니다.retention-days
옵션은 아티팩트 보관 기간 설정이며 필수 설정은 아닙니다.
actions/download-artifact 코드
Jobs-Names-actions_artifact_demo-02:
needs: Jobs-Names-actions_artifact_demo-01
runs-on: ubuntu-latest
steps:
- name: Check File
run: ls -al
- name: Download Artifact text_dir
uses: actions/download-artifact@v4
with:
name: text_dir-artifact
path: text_dir
- name: Check File
run: ls -al text_dir/*
actions/upload-artifact 기능을 통해 저장된 아티팩트를 저장하였습니다.name
설정으로 앞서 저장된 아티팩트의 이름을 지정하였으며, path
설정으로 다운받을 경로를 지정하였습니다.path
설정이 없다면 기존 workspace 경로($GITHUB_WORKSPACE)에 저장되므로 특정 경로에 저장이 필요하다면 설정이 필요합니다.
실행
자 이제 예시 코드를 실행하여 actions/upload-artifact, actions/download-artifact 기능을 통한 데이터 저장 및 다운을 확인해보겠습니다.
설정한 workflow가 실행되었습니다.
01번 작업에서 mkdir
명령어와 touch
명령어를 통해 text_dir
디렉토리에 파일을 생성하였습니다.
01번 작업에서 actions/upload-artifact 기능을 통해 파일을 저장하였습니다.
저장시 아티팩트는 text_dir-artifact
이름으로 저장되었습니다.
자 이번에는 02번 작업에서 actions/download-artifact 기능을 통해 파일을 다운받아보도록 하겠습니다.
앞서 저장한 text_dir-artifact
이름의 아티팩트를 지정하였으며 text_dir
경로에 다운된 것을 확인하였습니다.
추가로 해당 workflow를 확인해보면 저장된 아티팩트를 GitHub에서 직접 다운로드 받을 수 있습니다.
저장 이름은 앞서 설정한 text_dir-artifact
이름으로 저장됩니다.
GitHub Actions의 actions/upload-artifact와 actions/download-artifact 기능을 통해 소프트웨어 개발 과정에서 생성된 데이터를 저장하고 공유할 수 있어, CI/CD 파이프라인의 효율성과 유연성이 크게 향상됩니다. 또한 빌드 결과, 로그 파일, 테스트 결과 등의 중요한 데이터를 쉽게 참조하고 이후 작업이나 다른 작업에서 활용할 수 있습니다.
그러나 아티팩트의 보관 기간, 저장 공간, 데이터 전송량에 대한 제한 사항이 있어 이를 고려해야 합니다. 실제 테스트에서는 actions/upload-artifact로 데이터를 업로드하고 actions/download-artifact로 다운로드하여 성공적으로 파일을 사용하는 것을 확인했습니다. 이러한 기능들은 다양하게 활용하여 CI/CD 자동화 시 효율성을 높여보시기 바랍니다.
지금까지 actions/upload-artifact와 actions/download-artifact 기능을 통해 workflow에서 생성한 데이터를 저장하고 공유해보는 시간을 가졌습니다....! 끝...!
유익하게 보셨다면 공감을 눌러주고, 댓글로 의견을 공유해 남겨주시면 감사하겠습니다!
[Reference]
https://docs.github.com/en/actions/using-workflows/storing-workflow-data-as-artifacts