GitHub Actionsで別jobにArtifactが見つからないときの確認順

同じworkflow runのjob間で成果物が見つからない原因を、生成・upload・download・展開先pathで切り分けます。

AIものさし編集部

同じGitHub Actionsのrunで、build jobの成果物を次のjobへ渡したはずなのに「見つからない」。まず、download-artifactがartifactを選べないのか、ダウンロード後のファイルを後続stepが見つけられないのかを分けます。どちらも似た表示になり得ますが、直す設定は違います。

この記事は、同一workflow runのjob間で、生成・upload・download・利用先pathを対応させる手順です。別workflowや別runから取得する場合は、生成元runと認証範囲の確認が別に必要です。

最初にエラーを出したstepを特定する

失敗jobの最終表示だけでなく、最初にエラーを出したstepと、その直前のdownload結果を開きます。downloadが完了していて、後続のテスト・コピー・配布処理がpath not foundを出しているなら、artifact選択ではなく展開先と利用pathの不一致を調べます。

表は横にスクロールできます

失敗地点先に見ること
生成step期待ファイルが作られたか
upload step対象path、artifact名、実行・Skippedの結果
download step同じrunの名前・ID、対象Action版
download後のstep展開先、相対path、利用するファイル名

artifact名と、内包するファイル名・ディレクトリ名は同じではありません。名前をweb-bundleと付けたからといって、展開後に必ずweb-bundleというフォルダーが作られるとは考えないでください。

jobの依存関係と実際のupload完了を見る

GitHubの公式artifact共有資料は、前のjobの成果物を必要とするjobをneedsで依存させる例を示しています。生成jobの完了前に利用側が探していないか、意図したjobへ依存しているかを確認します。GitHub:Store and share data with workflow artifacts(新しいタブで開く)

ただしneedsがあるだけで、uploadが実行された証明にはなりません。生成jobが成功していても、条件によりuploadだけSkipped、空の出力path、想定と違うartifact名、といった状況を確認します。

表は横にスクロールできます

生成側の確認利用側と合わせるもの
run・commit・job同じ実行の成果物か
upload stepの結果完了したartifactがあるか
artifact名またはID利用側が選ぶ対象と一致するか
内包ファイルの一覧後続処理が必要な内容があるか

別jobで同じ相対pathを書いても、前jobで作ったファイルがそのまま存在する保証にはなりません。jobをまたぐデータの受渡しとしてupload/downloadを確認し、実行環境のファイル残存へ依存しない構成にします。GitHubのjob資料も、job間の依存関係を明示して実行順を制御する方法を案内しています。GitHub:Use jobs in a workflow(新しいタブで開く)

展開先と後続pathを一段ずつ合わせる

現行download-artifact READMEでは、一つのartifactを名前またはIDで取得すると、内容を指定pathへ直接展開する扱いです。すべてのartifactを取得する場合の名前別ディレクトリと混同しないでください。使用版での入力・出力と展開方法を確認します。GitHub:actions/download-artifact(新しいタブで開く)

次は、artifactの中にindex.htmlとassets/app.jsが入っていると仮定した配置例です。実runから取得した結果ではありません。

表は横にスクロールできます

項目例
artifact名web-bundle
内包ファイルindex.html、assets/app.js
download先pathreceived
確認するファイルreceived/index.html、received/assets/app.js
そのまま想定しないpathreceived/web-bundle/index.html

後続stepのworking-directoryも合わせて見ます。相対pathはそのstepが動く位置に依存するため、downloadの入力値だけを直しても、利用側が別のディレクトリを基準にしていれば見つかりません。download-pathの出力や実際のファイル一覧を、秘密値を含めない範囲で利用します。

ファイル一覧を確認できたら、後続処理へ渡すrootを一つに決めます。エラーを消すためにrepository全体を配布対象へ広げたり、存在する別フォルダーを推測で指定したりしないでください。

「中の一部だけない」場合は別に調べる

artifact自体は取れたがdotfileだけがない場合、upload時の隠しファイル設定や対象pathを調べます。artifact全体が見つからない場合と同じ対処にはしません。また、過去runの成果物なら、保存期限・run削除・対象IDも確認します。

ActionのバージョンやGitHub Enterprise Serverの対応範囲も記録します。古いissueにあるworkflow例のバージョン、権限、公開・配布処理を、そのまま現行環境へ移植しないでください。受渡しの検証は、機密を含まない小さな成果物を使い、外部公開のない環境で行えます。

復旧確認は受渡しと内容を組にする

確認用のファイルに、非機密の識別子を入れておくと、別のrunや古い成果物を使っていないか比較できます。実際の業務データを診断用に公開する必要はありません。

表は横にスクロールできます

確認合格条件
実行順意図した生成jobの後に利用する
artifact選択名前・ID・runが生成側と一致する
展開先指定rootに必要な相対pathがある
版と内容対象commit・識別子・必要ファイルが合う
後続処理同じrootを使い、不要ファイルを含めない

完了時は「ダウンロード成功」だけでなく、後続stepがどのpathの何を使えたかを記録します。未解決なら、最初の失敗step、artifact名、upload対象、download先、working-directory、機密を除いたファイル構成をそろえて担当者へ渡してください。本記事は公式仕様に沿った診断手順で、実repositoryのworkflow実行や成果物の公開・配布を行った報告ではありません。