前提条件
このチュートリアルを完了する前に、ワークフロー成果物を理解しておく必要があります。 「ワークフロー成果物」を参照してください。
ビルドおよびテストの成果物をアップロードする
コードのビルドおよびテストからの出力によって、多くの場合、エラーのデバッグに使用できるファイルと、デプロイできる本番コードが生成されます。 リポジトリにプッシュされるコードをビルドしてテストし、成功または失敗のステータスをレポートするワークフローを構成することができます。 デプロイメントに使用するビルドおよびテスト出力をアップロードし、失敗したテストまたはクラッシュをデバッグしてテストスイートのカバレッジを確認できます。
成果物をアップロードするには、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 ディレクトリにコードをビルドして、tests ディクトリでテストを実行する Node.js プロジェクトのワークフローを作成する方法です。 実行中の npm test によって、code-coverage.html という名前で、output/test/ ディレクトリに保存されるコード カバレッジ レポートが生成されると想定できます。
このワークフローでは、dist ディレクトリに運用環境の成果物をアップロードしますが、Markdown ファイルはその対象外です。 また、code-coverage.html レポートも別の成果物としてアップロードされます。
name: Node CI
on: [push]
jobs:
build_and_test:
runs-on: ubuntu-latest
steps:
- name: Checkout repository
uses: actions/checkout@v5
- name: npm install, build, and test
run: |
npm install
npm run build --if-present
npm test
- name: Archive production artifacts
uses: actions/upload-artifact@v3
with:
name: dist-without-markdown
path: |
dist
!dist/**/*.md
- name: Archive code coverage results
uses: actions/upload-artifact@v3
with:
name: code-coverage-report
path: output/test/code-coverage.html
name: Node CI
on: [push]
jobs:
build_and_test:
runs-on: ubuntu-latest
steps:
- name: Checkout repository
uses: actions/checkout@v5
- name: npm install, build, and test
run: |
npm install
npm run build --if-present
npm test
- name: Archive production artifacts
uses: actions/upload-artifact@v3
with:
name: dist-without-markdown
path: |
dist
!dist/**/*.md
- name: Archive code coverage results
uses: actions/upload-artifact@v3
with:
name: code-coverage-report
path: output/test/code-coverage.html
カスタムの成果物の保持期間を設定する
ワークフローによって作成された個々の成果物のカスタム保存期間を定義できます。 ワークフローを使用して新しい成果物を作成する場合、upload-artifact アクションで retention-days を使用できます。 この例は、my-artifact という名前の成果物に 5 日間のカスタム保存期間を設定する方法を示しています。
- name: 'Upload Artifact'
uses: actions/upload-artifact@v3
with:
name: my-artifact
path: my_file.txt
retention-days: 5
- name: 'Upload Artifact'
uses: actions/upload-artifact@v3
with:
name: my-artifact
path: my_file.txt
retention-days: 5
retention-days の値は、リポジトリ、Organization、または Enterprise によって設定された保持制限を超えることはできません。
ワークフロー実行中の成果物のダウンロード
以前にアップロードした成果物は、ワークフロー実行中に actions/download-artifact アクションを使ってダウンロードできます。
メモ
ダウンロードできるのは、同じワークフロー実行中にアップロードされたワークフロー内の成果物のみです。
個々の成果物をダウンロードするには、成果物の名前を指定します。 名前を指定せずに成果物をアップロードした場合、既定の名前は artifact です。
- name: Download a single artifact
uses: actions/download-artifact@v3
with:
name: my-artifact
また、名前を指定しないことで、ワークフロー実行のすべての成果物をダウンロードすることもできます。 これは、多数の成果物を扱っている場合に便利です。
- name: Download all workflow run artifacts
uses: actions/download-artifact@v3
ワークフロー実行のすべての成果物をダウンロードすると、各成果物のディレクトリがその名前を使用して作成されます。
構文の詳細については、GitHub Enterprise Server に対する actions/download-artifact アクションを参照してください。
ワークフロー内のジョブ間でのデータの受け渡し
upload-artifact アクションと download-artifact アクションを使用すると、ワークフローのジョブ間でデータを共有できます。 以下のワークフローの例では、同じワークフローのジョブ間でデータを受け渡す方法を説明しています。 詳細については、GitHub Enterprise Server に対する actions/upload-artifact と download-artifact のアクションを参照してください。
前のジョブの成果物に依存するジョブは、前のジョブが正常に完了するまで待つ必要があります。 このワークフローでは、needs キーワードを使用して、job_1、job_2、job_3 を順次実行できます。 たとえば、job_2 では needs: job_1 構文を使用することにより job_1 が必要となっています。
ジョブ1は、以下のステップを実行します。
- 数式の計算を実行し、その結果を
math-homework.txtというテキスト ファイルに保存します。 - アクションを
upload-artifact使用して、成果物名homeworkを持つファイルをアップロードmath-homework.txtします。
ジョブ2は、前のジョブの結果を利用して、次の処理を実行します。
- 前のジョブでアップロードされた
homework成果物をダウンロードします。 既定では、download-artifactアクションで、ステップが実行されているワークスペース ディレクトリに成果物をダウンロードします。path入力パラメータを使用すると、別のダウンロード ディレクトリを指定できます。 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@v3
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@v3
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@v3
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@v3
with:
name: homework
- name: Print the final result
shell: bash
run: |
value=`cat math-homework.txt`
echo The result is $value
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@v3
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@v3
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@v3
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@v3
with:
name: homework
- name: Print the final result
shell: bash
run: |
value=`cat math-homework.txt`
echo The result is $value
ワークフローの実行により、生成された成果物がアーカイブされます。 アーカイブされた成果物のダウンロードについて詳しくは、「ワークフローの成果物をダウンロードする」をご覧ください。