ワークフロー データを成果物として保存する

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

ノート: GitHubホストランナーは、現在GitHub Enterprise Serverでサポートされていません。 GitHubパブリックロードマップで、計画されている将来のサポートに関する詳しい情報を見ることができます。

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

成果物を使えば、ジョブの完了後にデータを永続化でき、そのデータを同じワークフロー中の他のジョブと共有できます。 成果物とは、ワークフロー実行中に生成されるファイル、またはファイルのコレクションです。 たとえば、ワークフローの実行が終了した後、成果物を使ってビルドとテストの出力を保存しておけます。

デフォルトでは、GitHub Enterprise Server はビルドログと成果物を 90 日間保存します。この保持期間はカスタマイズできます。 詳しい情報については、「使用制限、支払い、および管理」を参照してください。 プルリクエストの保持期間は、ユーザが新しいコミットをプルリクエストにプッシュするたびに再開されます。

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

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

アーティファクトは、GitHub Enterprise Serverのインスタンス 上の GitHub Actions 向けに設定された外部 blob ストレージ上のストレージスペースを消費します。

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

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

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

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

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

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

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

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

成果物をアップロードするには、upload-artifactアクションが使用できます。 成果物をアップロードする場合は、単一のファイルまたはディレクトリ、あるいは複数のファイルまたはディレクトリを指定できます。 また、特定のファイルやディレクトリを除外したり、ワイルドカードパターンを使用したりすることもできます。 成果物の名前を指定することをおすすめしますが、名前を指定しない場合は、 artifact がデフォルトの名前として使用されます。 構文の詳細については、 GitHub Enterprise Serverのインスタンス 上の 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 ディレクトリにプロダクションの成果物をアップロードしますが、Markdownファイルはその対象外です。 また、 code-coverage.htmlレポートは別の成果物としてアップロードされます。

YAML
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@v2
        with:
          name: dist-without-markdown
          path: |
            dist
            !dist/**/*.md
      - name: Archive code coverage results
        uses: actions/upload-artifact@v2
        with:
          name: code-coverage-report
          path: output/test/code-coverage.html

カスタムの成果物の保持期間を設定する

ワークフローによって作成された個々のアーティファクトのカスタム保存期間を定義できます。 ワークフローを使用して新しいアーティファクトを作成する場合、upload-artifact アクションで retention-days を使用できます。 この例は、my-artifact という名前のアーティファクトに 5 日間のカスタム保存期間を設定する方法を示しています。

YAML
  - name: 'Upload Artifact'
    uses: actions/upload-artifact@v2
    with:
      name: my-artifact
      path: my_file.txt
      retention-days: 5

retention-days の値は、リポジトリ、Organization、または Enterprise によって設定された保持制限を超えることはできません。

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

During a workflow run, you can use the download-artifact action to download artifacts that were previously uploaded in the same workflow run.

ワークフローの実行が完了したら、GitHub または REST API を使用してアーティファクトをダウンロードまたは削除できます。 詳しい情報については、「ワークフローの成果物をダウンロードする」、「ワークフローの成果物を削除する」、および「Artifacts REST API」を参照してください。

ワークフロー実行中の成果物のダウンロード

actions/download-artifact のダウンロードアクションを使用して、ワークフローの実行中に以前にアップロードされたアーティファクトをダウンロードできます。

ノート: ダウンロードできるのは、同じワークフロー実行中にアップロードされたワークフロー内の成果物のみです。

個々の成果物をダウンロードするには、成果物の名前を指定します。 名前を指定せずに成果物をアップロードした場合、デフォルトで名前はartifactになります。

- name: Download a single artifact
  uses: actions/download-artifact@v2
  with:
    name: my-artifact

また、名前を指定しないことで、ワークフロー実行のすべての成果物をダウンロードすることもできます。 これは、多数の成果物を扱っている場合に便利です。

- name: Download all workflow run artifacts
  uses: actions/download-artifact@v2

ワークフロー実行のすべての成果物をダウンロードすると、各成果物のディレクトリーがその名前を使用して作成されます。

構文の詳細については、GitHub Enterprise Serverのインスタンス 上の actions/upload-artifact アクションを参照してください。

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

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

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

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

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

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

  • 前のジョブでアップロードされたhomework成果物をダウンロードします。 デフォルトでは、download-artifactアクションは、ステップが実行されているワークスペースディレクトリに成果物をダウンロードします。 入力パラメータのpathを使って、別のダウンロードディレクトリを指定することもできます。
  • math-homework.txt ファイル中の値を読み取り、数式の計算を実行して、結果を math-homework.txt に再度保存し、その内容を上書きします。
  • math-homework.txtファイルをアップロードします。 このアップロードでは、同じ名前を共有しているため、以前にアップロードされた成果物を上書きします。

ジョブ3は、前のジョブでアップロードされた結果を表示して、次の処理を実行します。

  • homework成果物をダウンロードします。
  • 数式の結果をログに出力します。

このワークフロー例で実行される完全な数式は、(3 + 7) x 9 = 90です。

YAML
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@v2
        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@v2
        with:
          name: homework
      - shell: bash
        run: |
          value=`cat math-homework.txt`
          expr $value \* 9 > math-homework.txt
      - name: Upload math result for job 2
        uses: actions/upload-artifact@v2
        with:
          name: homework
          path: 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@v2
        with:
          name: homework
      - name: Print the final result
        shell: bash
        run: |
          value=`cat math-homework.txt`
          echo The result is $value

ワークフローの実行により、生成された成果物がアーカイブされます。 アーカイブされた成果物のダウンロードの詳細については、「ワークフローの成果物をダウンロードする」を参照してください。

ジョブ間でデータを受け渡して計算を実行するワークフロー

このドキュメントは役立ちましたか?

プライバシーポリシー

これらのドキュメントを素晴らしいものにするのを手伝ってください!

GitHubのすべてのドキュメントはオープンソースです。間違っていたり、はっきりしないところがありましたか?Pull Requestをお送りください。

コントリビューションを行う

OR, コントリビューションの方法を学んでください。

問題がまだ解決していませんか?