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

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

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

GitHub ActionsはGitHub Free、GitHub Pro、GitHub Team、GitHub Enterprise Cloud、GitHub Oneで利用できます。 GitHub Actions is not available for private repositories owned by accounts using legacy per-repository plans. 詳しい情報については「GitHubの製品」を参照してください。

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

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

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

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

アーティファクトはワークフロー実行中にアップロードする必要があります。 GitHubには、ビルドアーティファクトのアップロードとダウンロードに使用できるアクションが2つあります。 ワークフロー実行にアップロードされたファイルは、.zip形式でアーカイブされます。 詳細については、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は、以下のステップを実行します。

  • 値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を使用して、以降のワークフローでそれらのアーティファクトを取得することができます。

ビルドおよびテストアーティファクトをアップロードする

継続的インテグレーション(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ドロップダウンメニューを使ってをクリックしてください。
    成果物の削除のドロップダウンメニュー

参考リンク

担当者にお尋ねください

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

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