2023-03-04

Artifacts and Job Outputs in GitHub Actions

はじめに

この記事では、GitHub Actionsにおけるアーティファクトとジョブ出力について掘り下げ、実用的な例を示しながら、その汎用性と効果を説明します。

アーティファクトを用いたデータ共有

アーティファクトは、GitHub Actionsワークフローの実行中に格納して取得できるファイルです。アーティファクトのアップロードとダウンロードにより、同じジョブで実行されるアクション間や、同じワークフロー内の別のジョブ間でデータを共有することができます。

以下は、アーティファクトを使用してデータをアクション間で共有する例です。

yaml
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つのジョブで生成されたデータを他のジョブで使用できるようにし、より複雑なワークフローやデータ依存関係を可能にします。

以下は、ジョブ出力を使用してジョブ間でデータを共有する例です。

yaml
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コンテキストを使用してジョブ出力にアクセスし、受信したデータを表示しています。

参考

https://docs.github.com/en/actions

Ryusei Kakujo

researchgatelinkedingithub

Focusing on data science for mobility

Bench Press 100kg!