ドキュメントには頻繁に更新が加えられ、その都度公開されています。本ページの翻訳はまだ未完成な部分があることをご了承ください。最新の情報については、英語のドキュメンテーションをご参照ください。本ページの翻訳に問題がある場合はこちらまでご連絡ください。

アーティファクトを使用してワークフローデータを永続化する

アーティファクトを使うと、ワークフローが完了したときに、そのワークフローのジョブとストアデータの間でデータを共有することができます。

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_1job_2job_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

ワークフローアップロードアーティファクトワークフロー実行の画像

参考リンク

担当者にお尋ねください

探しているものが見つからなかったでしょうか?

弊社にお問い合わせください