CI-CD/GitHub Actions

[GitHub Actions] actions artifact 기능을 통한 데이터 공유 및 저장

날래용 2024. 3. 19. 08:00

[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