アーティファクトを使用してワークフローデータを永続化する
アーティファクトを使うと、ワークフローが完了したときに、そのワークフローのジョブとストアデータの間でデータを共有することができます。
GitHub Actions is available with GitHub Free, GitHub Pro, GitHub Team, and GitHub Enterprise Cloud. GitHub Actions is unavailable for per-repository plans, which are legacy billing plans. For more information, see "GitHub's products."
ここには以下の内容があります:
ワークフローアーティファクトについて
アーティファクトを使うと、ワークフローの完了後までデータを永続させることができます。 アーティファクトとは、ワークフロー実行中に生成されるファイル、またはファイルのコレクションです。 You can use artifacts to pass data between jobs in a workflow or persist build and test output after a workflow run has ended. GitHub stores artifacts for 90 days for pushes and pull requests. プルリクエストの場合の保持期間は、そのプルリクエストに対して新しいコミットがプッシュされるたびにリセットされます。
Storing artifacts uses storage space on GitHub. GitHub Actions usage is free for public repositories. For private repositories, each GitHub account receives a certain amount of free minutes and storage, depending on the product used with the account. For more information, see "Managing billing for GitHub Actions."
アーティファクトはワークフロー実行中にアップロードする必要があります。 GitHubには、ビルドアーティファクトのアップロードとダウンロードに使用できるアクションが2つあります。 ワークフロー実行にアップロードされたファイルは、.zip
形式でアーカイブされます。 詳細については、actions/upload-artifactアクションとdownload-artifactアクションを参照してください。
ワークフロー実行の各ジョブは、仮想環境の新しいインスタンスで実行されます。 ジョブが完了すると、ランナーが仮想環境のインスタンスを終了して削除します。
ジョブ間でデータを共有するには:
- ジョブが終了する前にデータをアップロードして、ワークフロー実行の内部にファイルを保存することができます。 アーカイブをアップロードするときは、名前を付けてください。
- ファイルをアップロードすると、同じワークフロー実行内の別のジョブでダウンロードできます。 アーカイブをダウンロードするとき、アーカイブは名前で参照できます。 アップロードされているアーティファクトをダウンロードできるのは、同じワークフロー実行中だけです。
ジョブの一部であるステップは、同じ仮想環境で、ただし個別のプロセスで実行されます。 ジョブのステップ間のデータを受け渡すには、入力と出力を使用できます。 入力と出力の詳細については、「GitHub Actions構文のメタデータ」を参照してください。
アップロードしたい一般的なビルドおよびテスト出力アーティファクトは、次のとおりです。
- ログファイルとコアダンプ
- テスト結果、エラー、スクリーンショット
- バイナリまたはアーカイブファイル
- ストレステストのパフォーマンス出力およびコード網羅率の結果
ワークフローのジョブ間でデータを受け渡す
upload-archive
アクションとdownload-archive
アクションを使うと、ワークフローのジョブ間でデータを共有できます。 以下のワークフローの例では、同じワークフローのジョブ間でデータを受け渡す方法を説明しています。 詳細については、actions/upload-artifactアクションとdownload-artifactアクションを参照してください。
前のジョブのアーティファクトに依存するジョブは、前のジョブが正常に完了するまで待つ必要があります。 このワークフローは、needs
キーワードを使用してjob_1
、job_2
、job_3
を順次実行することができます。 たとえば、job_2
にはneeds: job_1
構文を使用するjob_1
が必要です。
ジョブ1は、以下のステップを実行します。
- 値3と7を加算し、その値を
math-homework.txt
というテキストファイルに出力します。 upload-artifact
アクションを使って、math-homework.txt
ファイルをhomework
という名前でアップロードします。 このアクションで、ファイルがhomework
という名前のディレクトリに配置されます。
ジョブ2は、前のジョブの結果を利用して、次の処理を実行します。
- 前のジョブでアップロードされた
homework
アーティファクトをダウンロードします。 デフォルトでは、download-artifact
アクションは、ステップが実行されているワークスペースディレクトリにアーティファクトをダウンロードします。path
入力パラメータを使うと、アクションのダウンロード先として別のディレクトリを指定できます。 homework/math-homework.txt
ファイルの値を読み取ってそれに9を掛け、新しい値でファイルを更新します。math-homework.txt
ファイルをアップロードします。 このアップロードは、前のアップロードを上書きします。どちらも同じ名前を使っているからです。
ジョブ3は、前のジョブでアップロードされた結果を表示して、次の処理を実行します。
homework
アーティファクトをダウンロードします。- 数式の結果をログに出力します。
このワークフロー例で実行される完全な数式は、(3 + 7) x 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
ワークフロー実行間でデータを共有する
ワークフローが終了すると、[Actions] タブでワークフロー実行を検索して、GitHub上にアップロードされたアーティファクトをダウンロードすることができます。 GitHubは現在、アップロードされたアーティファクトを取得するREST APIを提供していません。
以前に実行したワークフローからアーティファクトにアクセスする必要がある場合は、アーティファクトを別の場所に保存する必要があります。 たとえば、ワークフローの最後にスクリプトを実行してビルドアーティファクトをAmazon S3またはArtifactoryに保存し、そのストレージサービスのAPIを使用して、以降のワークフローでそれらのアーティファクトを取得することができます。
ビルドおよびテストアーティファクトをアップロードする
GitHubにホストされている仮想環境でコードをビルドして作成する継続的インテグレーション (CI) ワークフローを作成することができます。 GitHub Actionsを使用して CI を実行する詳細については、「継続的インテグレーションについて」を参照してください。
コードのビルドおよびテストを出力すると多くの場合、エラーのデバッグに使用できるファイルと、デプロイできる本番コードが生成されます。 リポジトリにプッシュされるコードをビルドしてテストし、成功または失敗のステータスをレポートするワークフローを構成することができます。 デプロイメントに使用するビルドおよびテスト出力をアップロードし、失敗したテストまたはクラッシュをデバッグしてテストスイートの範囲を確認できます。
アーティファクトをアップロードするには、upload-archive
アクションを使用します。 詳細については、actions/upload-artifactアクションを参照してください。
サンプル
たとえば、リポジトリまたはWebアプリケーションに、CSSとJavaScriptにコンパイルする必要があるSassおよびTypeScriptファイルが含まれているとします。 ビルド構成がdist
ディレクトリにコンパイル後のファイルを出力すると仮定すると、テストがすべて正常に完了した場合、dist
ディレクトリにあるファイルがWebアプリケーションにデプロイされます。
|-- hello-world (repository)
| └── dist
| └── tests
| └── src
| └── sass/app.scss
| └── app.ts
| └── output
| └── test
|
この例では、src
ディレクトリにコードをbuilds
して、tests
ディレクトリでテストを実行するNode.jsプロジェクトのワークフローを作成しています。 実行中のnpm test
が、code-coverage.html
という名前で、output/test/
ディレクトリに保存されるコード網羅率レポートを生成すると想定できます。
このワークフローは、dist
ディレクトリの本番アーティファクトとcode-coverage.html
を2種類のアーティファクトとしてアップロードします。
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