はじめに
この記事では、GitHub Actionsにおけるアーティファクトとジョブ出力について掘り下げ、実用的な例を示しながら、その汎用性と効果を説明します。
アーティファクトを用いたデータ共有
アーティファクトは、GitHub Actionsワークフローの実行中に格納して取得できるファイルです。アーティファクトのアップロードとダウンロードにより、同じジョブで実行されるアクション間や、同じワークフロー内の別のジョブ間でデータを共有することができます。
以下は、アーティファクトを使用してデータをアクション間で共有する例です。
jobs:
produce_artifact:
runs-on: ubuntu-latest
steps:
- name: Create artifact
run: |
echo "This is an example artifact" > artifact.txt
- name: Upload artifact
uses: actions/upload-artifact@v2
with:
name: my-artifact
path: artifact.txt
consume_artifact:
needs: produce_artifact
runs-on: ubuntu-latest
steps:
- name: Download artifact
uses: actions/download-artifact@v2
with:
name: my-artifact
- name: Display artifact content
run: cat my-artifact/artifact.txt
この例では、produce_artifact
ジョブでartifact.txt
というアーティファクトファイルを作成し、actions/upload-artifact
アクションを使用してアーティファクトをアップロードしています。consume_artifact
ジョブでは、actions/download-artifact
アクションを使用してアーティファクトをダウンロードし、その内容を表示しています。
ジョブ出力を活用
ジョブ出力は、異なるジョブで実行されるアクション間でデータを共有する強力な方法です。ジョブレベルで出力を定義することで、1つのジョブで生成されたデータを他のジョブで使用できるようにし、より複雑なワークフローやデータ依存関係を可能にします。
以下は、ジョブ出力を使用してジョブ間でデータを共有する例です。
jobs:
producer:
runs-on: ubuntu-latest
steps:
- name: Produce data
run: |
echo "Produced data: example-data" > data.txt
echo "data=$(cat data.txt)" >> $GITHUB_OUTPUT
id: producer_step
outputs:
produced_data: ${{ steps.producer_step.outputs.data }}
consumer:
needs: producer
runs-on: ubuntu-latest
steps:
- name: Consume data
run: |
echo "Received data: ${{ needs.producer.outputs.produced_data }}"
この例では、producer
ジョブでdata.txt
というファイルを作成し、その内容を出力として設定しています。次に、ステップ出力の値を設定するために、produced_data
というジョブ出力を定義しています。consumer
ジョブでは、needs
コンテキストを使用してジョブ出力にアクセスし、受信したデータを表示しています。
参考