問題点
- あるジョブの環境変数を別のジョブで受け取り、その結果に基づいて処理を行いたいことがある
- 例えば自動テストの結果(成功/失敗)をSlackに通知する場合など
- しかし、GitHub Actionsではジョブ間の環境変数の受け渡しを直接行う機能は用意されていない
解決策
- 一旦ファイルとして書き出してアップロードし、そのファイルを別のジョブからダウンロードして参照するというのが一般的な解決策となる
- ファイルのアップロードやダウンロードを行えるアクションとして
actions/upload-artifact@v3
とactions/download-artifact@v3
が用意されている
検証
- 設定
.github/workflows/main.yml
name: Artifacts example
on:
push:
jobs:
something-job:
runs-on:
- ubuntu-latest
steps:
# 自動テストの実行等
- name: Do something
run: echo Something
- name: Save job status
# 前のステップの成功/失敗に関わらず、このステップが実行されるようにする
# デフォルトでは前のステップが失敗した場合、後続のステップは実行されない
if: always()
# ジョブのステータス(成功/失敗)をファイルに書き出し
run: echo "${{ job.status }}" > something-job-status
- name: Upload job status
if: always()
# ファイルのアップロード
uses: actions/upload-artifact@v3
with:
name: something-job-status
path: something-job-status
notify:
# something-job の実行後にこのジョブが実行されるようにする
needs:
- something-job
# 前のジョブの成功/失敗に関わらず、このジョブが実行されるようにする
# デフォルトでは前のジョブが失敗した場合、後続のジョブは実行されない
if: always()
runs-on:
- ubuntu-latest
steps:
# ファイルのダウンロード
- name: Download something job status
uses: actions/download-artifact@v3
with:
name: something-job-status
# something-job のジョブのステータスを参照
- name: Display job1 status
run: cat something-job-status
- 実行結果