👋 We've unified all of GitHub's product documentation in one place! Check out the content for REST API, GraphQL API, and Developers. Stay tuned for a blog post later today.


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

成果物を使用してワークフローデータを永続化する

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

GitHub ActionsはGitHub Free、GitHub Pro、GitHub FreeのOrganization、GitHub Team、GitHub Enterprise Cloud、GitHub Oneで利用できます。 GitHub Actionsは、レガシーのリポジトリごとのプランを使っているアカウントが所有しているプライベートリポジトリでは利用できません。 詳しい情報については「GitHubの製品」を参照してください。

ここには以下の内容があります:

ワークフローの成果物について

成果物を使えば、ジョブの完了後にデータを永続化でき、そのデータを同じワークフロー中の他のジョブと共有できます。 成果物とは、ワークフロー実行中に生成されるファイル、またはファイルのコレクションです。 たとえば、成果物を使ってワークフローの実行が終了した後、ビルドとテストの出力を保存しておけます。 プッシュとプルリクエストについては、GitHubは90日間成果物を保存します。 プルリクエストの場合の保持期間は、そのプルリクエストに対して新しいコミットがプッシュされるたびにリセットされます。

以下は、アップロードできる一般的な成果物の一部です。

  • ログファイルとコアダンプ
  • テスト結果、エラー、スクリーンショット
  • バイナリあるいは圧縮されたファイル
  • ストレステストのパフォーマンス出力およびコード網羅率の結果

成果物の保存には、GitHub上のストレージ領域が使われます。 パブリックリポジトリでは、GitHub Actionsの利用は無料です。 プライベートリポジトリでは、それぞれのGitHubアカウントは使用している製品に応じて一定量の無料の分とストレージを受け取ります。 詳細は「GitHub Actions の支払いの管理」を参照してください。

成果物はワークフローの実行中にアップロードされ、成果物の名前とサイズはUIで見ることができます。 GitHubのUIを使って成果物がダウンロードされる場合、成果物の一部として個別にアップロードされたすべてのファイルはzipして1つのファイルにまとめられます。 これはすなわち、支払いはこのzipファイルのサイズではなく、アップロードされた成果物のサイズを元に計算されるということです。

GitHubには、ビルドの成果物のアップロードとダウンロードに使用できるアクションが2つあります。 詳細については、actions/upload-artifactアクションとdownload-artifactアクションを参照してください。

GitHubホストランナーでは、ワークフロー内の各ジョブは仮想環境の新しいインスタンス内で実行されます。 ジョブが完了すると、ランナーが仮想環境のインスタンスを終了して削除します。

ジョブ間でデータを共有するには:

  • ファイルをアップロード: アップロードされたファイルに名前を付けて、ジョブが終了する前にデータをアップロードしてください。
  • ファイルをダウンロード: 成果物は、同じワークフローの実行中にアップロードされたものだけがダウンロードできます。 ファイルをダウンロードする際には、名前で参照できます。

ジョブのステップは、ランナーマシン上で同じ環境を共有しますが、それぞれが個別のプロセス内で実行されます。 ジョブのステップ間のデータを受け渡すには、入力と出力を使用できます。 入力と出力の詳細については、「GitHub Actions構文のメタデータ」を参照してください。

ワークフローのジョブ間でデータを受け渡す

upload-artifactアクションとdownload-artifactアクションを使うと、ワークフローのジョブ間でデータを共有できます。 以下のワークフローの例では、同じワークフローのジョブ間でデータを受け渡す方法を説明しています。 詳細については、actions/upload-artifactアクションとdownload-artifactアクションを参照してください。

前のジョブの成果物に依存するジョブは、前のジョブが正常に完了するまで待つ必要があります。 このワークフローは、needsキーワードを使用してjob_1job_2job_3を順次実行することができます。 たとえば、job_2にはneeds: job_1構文を使用するjob_1が必要です。

ジョブ1は、以下のステップを実行します。

  • 数式の計算を実行し、その結果をmath-homework.txtというテキストファイルに保存します。
  • upload-artifactアクションを使って、math-homework.txtファイルをhomeworkという名前でアップロードします。 このアクションで、ファイルがhomeworkという名前のディレクトリに配置されます。

ジョブ2は、前のジョブの結果を利用して、次の処理を実行します。

  • 前のジョブでアップロードされたhomework成果物をダウンロードします。 デフォルトでは、download-artifactアクションは、ステップが実行されているワークスペースディレクトリに成果物をダウンロードします。 入力パラメータのpathを使って、別のダウンロードディレクトリを指定することもできます。
  • homework/math-homework.txtファイル中の値を読み取り、数式の計算を実行し、結果をmath-homework.txtに保存します。
  • 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を使って成果物をダウンロードすることもできます。 For more information, see "Artifacts."

以前のワークフローの実行による成果物にアクセスする必要がある場合、その成果物をどこかに保存しておかなければなりません。 たとえば、ワークフローの最後にスクリプトを実行してビルドの成果物をAmazon S3またはArtifactoryに保存し、そのストレージサービスのAPIを使用して、以降のワークフローでそれらの成果物を取得することができます。

ビルドおよびテストの成果物をアップロードする

継続的インテグレーション(CI)ワークフローを作成して、コードのビルドやテストを行えます。 GitHub Actionsを使用して CI を実行する詳細については、「継続的インテグレーションについて」を参照してください。

コードのビルドおよびテストを出力すると多くの場合、エラーのデバッグに使用できるファイルと、デプロイできる本番コードが生成されます。 リポジトリにプッシュされるコードをビルドしてテストし、成功または失敗のステータスをレポートするワークフローを構成することができます。 デプロイメントに使用するビルドおよびテスト出力をアップロードし、失敗したテストまたはクラッシュをデバッグしてテストスイートの範囲を確認できます。

成果物をアップロードするには、upload-artifactアクションが使用できます。 詳細については、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@v2
      - 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

ワークフローアップロード成果物ワークフロー実行の画像

成果物のダウンロードあるいは削除

ワークフローでアップロードされた成果物をダウンロードできます 成果物は90日後に自動的に期限切れになりますが、GitHubで期限切れになる前に成果物を削除すれば、使用されたGitHub Actionsのストレージをいつでも回収できます。

警告: いったん削除された成果物をリストアすることはできません。

  1. GitHubで、リポジトリのメインページにアクセスしてください。
  2. リポジトリ名の下でActions(アクション)をクリックしてください。
    メインのリポジトリナビゲーション内のアクションタブ
  3. 左のサイドバーで、表示させたいワークフローをクリックしてください。
    左サイドバーのワークフローのリスト
  4. "Workflow runs(ワークフローの実行)"の下で、表示させたい実行の名前をクリックしてください。
    ワークフローの実行の名前
  5. 成果物をダウンロードするには、[Artifacts] ドロップダウンメニューを使用して、ダウンロードしたい成果物を選択します。
    成果物のダウンロードのドロップダウンメニュー
  6. 成果物を削除するには、Artifactsドロップダウンメニューを使ってをクリックしてください。
    成果物の削除のドロップダウンメニュー

参考リンク

担当者にお尋ねください

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

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