Skip to main content

아티팩트를 사용하여 워크플로우 데이터 유지하기

아티팩트들은 워크플로우의 잡들 사이에서 데이터를 공유하게 해줍니다. 그리고 워크플로우가 완료되고 나면 데이터를 저장하게 해줍니다.

아티팩트에 대하여#

아티팩트는 잡이 완료된 후에도 데이터를 유지할 수 있게 해줍니다. 아티팩트는 워크플로우 실행 중 생산된 파일, 파일의 컬렉션입니다. 잡 중간에 아티팩트를 사용하여 데이터를 통과시킬 수 있으며, 워크플로우 실행이 끝난 뒤에도 빌드 혹은 테스트 결과를 보존할 수 있습니다. 깃허브는 푸쉬와 풀 요청에 대해 90일동안 아티팩트를 저장합니다. 풀 요청에 대한 보존 기간은 누군가 새로운 커밋을 풀 요청에 푸쉬할 때 재시작됩니다.

아티팩트를 저장하는 것은 깃허브의 저장 공간을 사용합니다. 깃허브 액션의 사용은 퍼블릭 레포지토리에서는 무료입니다. 프라이빗 레포지토리에서는 특정한 양의 무료 미닛(minutes)과 공간을 갖게 됩니다. 이는 계정에 따라 달라집니다. 더 자세한 내용은 과금정책을 참고하세요.

아티팩트를 워크플로우 실행 중에 반드시 업로드해야합니다. 깃허브는 두 가지 액션을 제공하는데, 빌드 아티팩트를 업로드 하는 것과 다운로드하는 것입니다. 워크플로우 실행에 업로드된 파일은 .zip 포맷으로 아카이브됩니다. 더 많은 정보는 actoins/upload artifactsdownload-artifacts를 참고하세요.

각 잡은 가상 환경의 새 인스턴스에서 실행됩니다. 잡이 완료되면, 러너는 종료되고 가상 환경의 인스턴스를 제거합니다.

잡들 사이에서 데이터를 공유하려면:

  • 잡 종료 전에 워크플로우 실행 안에 파일을 저장하기 위해 데이터를 업로드 할 수 있습니다. 아카이브를 업로드할 때는 반드시 이름을 정해야합니다.
  • 파일 업로드 후에는 같은 워크플로우 실행에서 다른 잡으로부터 다운로드 받을 수 있습니다. 아카이브를 다운로드 받을 때, 이름에 따라 아카이브를 참조하게됩니다. 같은 워크플로우 실행동안 업로드된 아티팩드들만 다운로드 받을 수 있습니다.

스텝들은 같은 가상환경에서 시행되나, 개별적인 프로세스들에 그들 각자의 프로세스들에 의해 실행됩니다. 스텝 사이에서 데이터를 통과시키고 싶다면, 입력(inputs)과 출력(outputs)를 사용하십시오. 더 자세한 내용은 메타데이터 문법을 참고하세요.

이들은 일반적인 빌드, 테스트 출력 아티팩트들입니다.

  • 로그 파일들 그리고 코어 덤프(dumps)
  • 테스트 결과들, 실패들, 그리고 스크린샷들
  • 바니너리 파일 혹은 아카이브파일들
  • 테스트 퍼포먼스 출력과 코드 커버리지 결과 강조

잡 사이에 데이터 통과하기#

upload-archivedownload-archived 액션을 사용하여 잡들 사이에서 데이터를 공유할 수 있습니다. 이 예시는 어떻게 데이터를 통과시키는지 보여줍니다. 더 많은 정보는 artifact/upload-artifactdownlaod-artifact를 참고하세요.

이전 잡의 아티팩트들에 의존적인 잡들은 그 잡들이 성공적으로 완료될 때까지 기다려야 합니다. 대표적으로 이러한 워크플로우는 needs라는 키워드로 job_1, job_2, job_3를 순차적으로 진행할 것입니다. 예를들면, job_2job_1needs: job_1 문법을 요구합니다.

Job 1의 수행단계

  • 3과 7을 더해서 math-homework.txt라는 텍스트파일에 값을 출력합니다.
  • math-homework.txthomework라는 이름과 함께 업로드하기 위해 upload-artifact 액션을 사용한다. 액션은 homework라는 디렉토리에 파일을 위치시킵니다.

Job 2는 전단계의 결과를 쓴다.

  • 전 잡에서 업로드 되었던 homework 아티팩트를 다운로드합니다. 디폴트로, download-artifact 액션은 실행되는 스텝이 있는 워크스페이스 디렉토리에 아티팩트를 다운로드합니다. path 입력 파라미터를 사용하여 특정 디렉토리로 다운로드 하게끔 지정할 수 있습니다.
  • homework/math-homework.txt 파일의 값을 읽고, 9를 곱한다. 그리고 파일을 새 값으로 업데이트합니다.
  • math-homework.txt 파일을 업로드합니다. 이 업로드는 전에 올렸던 것을 덮어쓰게 됩니다. 왜냐하면 서로 같은 이름은 갖고 있기 때문이다.

Job 3는 이전 잡의 업로드된 결과를 보여준다.

  • homeowrk 아티팩트를 다운로드 한다.
  • 수학 등식을 로그를 출력한다.

따라서 이 워크플로우에서 완전히 결과는 (3 + 7) * 9 = 90이 나온다.

name: Share data between jobs
on: [push]
jobs:
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@v1
with:
name: homework
path: math-homework.txt
job_2:
name: Multiply by 9
needs: job_1
runs-on: windows-latest
steps:
- name: Download math result for job 1
uses: actions/download-artifact@v1
with:
name: homework
- shell: bash
run: |
value=`cat homework/math-homework.txt`
expr $value \* 9 > homework/math-homework.txt
- name: Upload math result for job 2
uses: actions/upload-artifact@v1
with:
name: homework
path: homework/math-homework.txt
job_3:
name: Display results
needs: job_2
runs-on: macOS-latest
steps:
- name: Download math result for job 2
uses: actions/download-artifact@v1
with:
name: homework
- name: Print the final result
shell: bash
run: |
value=`cat homework/math-homework.txt`
echo The result is $value

img

워크플로우 실행 사이에 데이터 공유#

워크플로우 종료 후에, Action 탭에서 그 실행을 찾음으로써 깃허브에 업로드되었던 아카이브를 다운로드 할 수 있습니다. 깃허브는 지금 현재 업로드된 아티팩트를 리트라이브(retrieve, 검색)하기 위한 REST API를 제공하지 않습니다.

만약 전에 실행했던 워크플로우로 부터의 아티팩트에 접근하는 것이 필요하다면, 아티팩트를 어딘가에 저장해놓아야합니다. 예를 들면, 워크플로우 말미에 Amazon S3 나 Artifactory에 저장하는 스크립트를 작성하고, 그 아티팩트들을 앞으로 있을 워크플로우에서 리트라이브하기 위해 스토리지 서비스의 API를 사용합니다.

빌드, 테스트 아티팩트 업로드하기#

깃허브 호스티드 가상 공간에서 코드를 빌드하고 테스트하기 위한 CI 워크플로우를 만들 수 있습니다. 더 자세한 내용은 CI에 대하여를 참고하세요.

많은 경우에 빌드와 테스트의 결과는 테스트 실패와 디플로이할 수 있는 프로덕션 코드를 디버그 하기 위해 사용하는 파일들을 생합니다. 레포지토리에 푸쉬된 코드들을 빌드하고 테스트하기 위한 워크플로우를 구성할 수 있으며, 성공 실패 여부를 리포트하게 만들 수도 있습니다. 배포(deployments), 실패한 테스트와 충돌들 디버깅, 테스트 수트 커버리지 보기를 위해 사용되는 빌드, 테스트 결과들을 업로드 할 수 있습니다.

upload-archive 액션을 사용하여 아티팩트를 업로드 할 수 있습니다. 더 자세한 내용은 actions/upload-artifact를 참고하세요.

#

예를들면 레포지토리나 웹 어플리케이션은 SASS 나 타입스크립트 파일들을 포함할 수 있으며, 반드시 CSS 파일을 자바스크립트로 컴파일 해야합니다. 빌드 구성이 컴파일된 파일을 dist 디렉토리에 출력한다고 가정하면, 모든 테스트가 성공적으로 완료될 때 웹 어플리케이션 서버에 그 파일들이 디플로이 됩니다.

|-- hello-world (repository)
| └── dist
| └── tests
| └── src
| └── sass/app.scss
| └── app.ts
| └── output
| └── test
|

이 예시는 어떻게 Node.js 프로젝트를 위한 워크플로우를 생성하는지 보여줍니다. 해당 워크플로우는 src 디렉토리 안에 build될 거고, test 디렉토리 안에서 테스트 될것입니다. 또, npm testcode-coverage.html이라는 이름의 코드커버리지 리포트를 생산하여 ouput/test/ 디렉토리에 합니다.

워크플로우는 dist 디렉토리에 프로덕션 아티팩트와 code-coverage.html을 각각 독립적인 아티팩트로 업로드합니다.

name: Node CI
on: [push]
jobs:
build_and_test:
runs-on: ubuntu-latest
steps:
- name: Checkout repository
uses: actions/checkout@v1
- name: npm install, build, and test
run: |
npm install
npm run build --if-present
npm test
- name: Archive production artifacts
uses: actions/upload-artifact@v1
with:
name: dist
path: dist
- name: Archive code coverage results
uses: actions/upload-artifact@v1
with:
name: code-coverage-report
path: output/test/code-coverage.html

img