
GitHub Actionsのワークフローで生成したアーティファクトを別のジョブから参照して標準出力してみた
こんにちは!製造ビジネステクノロジー部の小林です。
GitHub Actionsでワークフローを作成する際、ビルド成果物やテスト結果などのファイルを保存し、ジョブ間で共有したい時があると思います。そんなときに便利なのが「アーティファクト」機能です。今回は、アーティファクトの基本的な使い方を試してみました。
やりたいこと
GitHubの一時ストレージにアーティファクトをアップロードします。その後、同じワークフロー内の別のジョブからそのアップロードしたファイルをダウンロードし、標準出力に表示します。
アーティファクトとは?
ワークフロー内で生成したファイルをアーティファクトと呼びます。アーティファクトはGitHubが管理する一時ストレージに保存可能です。アーティファクトの保存期間はデフォルトでは90日間となっており、期間が過ぎると自動的に削除されます。
アーティファクトの保存期間はリポジトリの種類によって調整できます。
- パブリックリポジトリの場合: この保持時間を1日から90日の間で変更できます。
- プライベートリポジトリの場合: この保持期間を 1 から 400 日の間で変更できます。
アーティファクトの活用ケース
アーティファクトはどのような時に活用できるか見てみました。
- ビルドしたバイナリやパッケージの保存
- テスト結果やカバレッジレポートの保存
- 複数のジョブ間でのデータ共有
- ログファイルやデバッグ情報の保存
気をつけたいこと
下記は公式ドキュメントからの引用です。
ファイルのアップロード: アップロードされたファイルに名前を付けて、ジョブが終了する前にデータをアップロードします。
ファイルのダウンロード: アップロードされたアーティファクトをダウンロードできるのは、同じワークフローの実行中だけです。 ファイルをダウンロードする際には、名前で参照できます。
アーティファクトを使ってみる
アーティファクトのアップロード
まずは、アーティファクトのアップロードをやってみます。日付情報をファイルに保存し、それをアーティファクトとしてアップロードしてみます。
name: Artifact
on: [push] # プッシュ時にワークフローをトリガー
jobs:
upload:
runs-on: ubuntu-latest
steps:
- run: date > date.txt # アーティファクトの生成
- uses: actions/upload-artifact@v4 # アーティファクトのアップロード
with:
name: uploaded # アーティファクト名
path: date.txt # アップロードするファイル
ステップでは、dateコマンドを実行して現在の日時をdate.txtファイルに書き込みます。
- run: date > date.txt # アーティファクトの生成
次に、actions/upload-artifact@v4アクションを使用して、生成したファイルをアーティファクトとしてアップロードします。
- name: アーティファクトの識別名を指定します
- path: アップロードするファイルやディレクトリのパスを指定します
動作確認
GitHub Actionsのコンソールで実行ログを見てみます。
アーティファクトが正常にアップロードされ、一意のIDが割り当てられています。また、アーティファクトをダウンロードするためのURLも表示されています。
Actionsの詳細画面からもアーティファクトをダウンロードできます。
ダウンロードしたアーティファクトの中身はこちらです。
アーティファクトのダウンロード
次に、アップロードしたアーティファクトを、別のジョブからダウンロードして、標準出力してみます。
追加するワークフロー
...省略
download:
runs-on: ubuntu-latest
needs: [upload]
steps:
- name: Download artifact
uses: actions/download-artifact@v4 # アーティファクトのダウンロード
with:
name: uploaded # アーティファクト名
path: downloaded # ダウンロード先のディレクトリ
- run: cat downloaded/date.txt # ダウンロードしたファイルの内容を標準出力
ワークフロー全体
name: Artifact
on: [push]
jobs:
upload:
runs-on: ubuntu-latest
steps:
- run: date > date.txt # アーティファクトの生成
- uses: actions/upload-artifact@v4 # アーティファクトのアップロード
with:
name: uploaded # アーティファクト名
path: date.txt # アップロードするファイル
download:
runs-on: ubuntu-latest
needs: [upload]
steps:
- name: Download artifact
uses: actions/download-artifact@v4 # アーティファクトのダウンロード
with:
name: uploaded # アーティファクト名
path: downloaded # ダウンロード先のディレクトリ
- run: cat downloaded/date.txt # ダウンロードしたファイルの内容を標準出力
動作確認
GitHub Actionsのコンソールでダウンロードジョブの実行ログを見てみましょう。
Blobストレージへのリダイレクト (行11)
アーティファクトは実際にはAzure Blob Storageに保存されており、そこからダウンロードされます。この長いURLには、ワークフローの実行ID、ジョブID、アーティファクトIDなどの情報が含まれています。
整合性検証 (行15)
ダウンロードしたファイルのSHA256ハッシュが計算され、期待値と一致することを確認しています。これにより、ファイルが転送中に破損していないことを保証します。
ダウンロードしたアーティファクトの内容が表示されていることがわかります!
おわりに
GitHub Actionsのアーティファクト機能を使うことで、ワークフロー内のジョブ間でファイルを簡単に共有できました。アップロードは actions/upload-artifact アクション、ダウンロードは actions/download-artifact アクションを使用します。
この機能を活用することで、ビルド成果物の保存、テスト結果の共有、複数ジョブにまたがるデータ処理など、より効率的なCI/CDパイプラインを構築できそうですね。この記事がアーティファクトの利用を検討されている方の参考になれば幸いです。