@actions/download-artifact
警告
actions/download-artifact@v3 預定於2024 年 11 月 30 日棄用。了解更多。同樣,v1/v2 計劃於2024 年 6 月 30 日棄用。請更新您的工作流程以使用工件操作的 v4。此棄用不會影響客戶正在使用的 GitHub Enterprise Server 的任何現有版本。
從工作流程運行中下載操作工件。由 @actions/artifact 套件內部驅動。
另請參閱上傳工件。
@actions/download-artifact
權限遺失
下載單一神器
下載所有工件
將多個(已過濾的)工件下載到同一目錄
從其他工作流程運行或儲存庫下載工件
輸入
輸出
改進
重大變化
v4 - 新功能
用法
範例
限制
重要的
GHES 目前尚未支援 download-artifact@v4+。如果您使用 GHES,則必須使用 v3。
upload-artifact@v4和download-artifact@v4的發布是Artifacts後端架構的重大改變。他們有許多性能和行為的改進。
有關更多信息,請參閱@actions/artifact
文件。
下載速度顯著加快,在最壞的情況下可提高 90% 以上。
當提供 PAT 時,可以從其他工作流程執行和儲存庫下載工件。
在自架運行器上,可能需要額外的防火牆規則。
不支援下載從action/upload-artifact@v3
及以下版本建立的工件。
有關重大變更的協助,請參閱 MIGRATION.md。
- 使用:actions/download-artifact@v4 with:# 要下載的工件的名稱。支援基本波浪號擴充。預設為 $GITHUB_WORKSPACEpath:# 應下載的工件的全域模式。的工件將位於路徑指定的相同目錄中。預設值為 'false'merge-multiple:# 用於透過 GitHub API 進行驗證的 GitHub 令牌。 # 從不同儲存庫或不同工作流程執行下載工件時需要此設定。如果未指定,該操作將從目前儲存庫和目前工作流程下載工件run.github-token:# 儲存庫擁有者和儲存庫名稱透過「/」連接在一起。是要執行的儲存庫工件將從下列位置下載。預設為 ${{ github.repository }}repository:# 從中上傳所需下載工件的工作流程執行的 ID。預設為 ${{ github.run_id }}run-id:
姓名 | 描述 | 例子 |
---|---|---|
download-path | 下載工件的絕對路徑 | /tmp/my/download/path |
下載到目前工作目錄( $GITHUB_WORKSPACE
):
步驟: - 使用:actions/download-artifact@v4 with:name: my-artifact- name: 顯示下載檔案的結構 運行: ls -R
下載到特定目錄(也支援~
擴充):
步驟: - 使用:actions/download-artifact@v4 with:name: my-artifactpath: your/destination/dir- name: 顯示下載檔案的結構 執行: ls -R 你的/目的地/目錄
如果未提供name
輸入參數,則將下載所有工件。為了區分下載的工件,預設將為每個單獨的工件建立一個由工件名稱表示的目錄。可以使用merge-multiple
輸入參數來變更此行為。
例如,如果有兩個工件Artifact-A
和Artifact-B
,而目錄為etc/usr/artifacts/
,則目錄結構將如下所示:
etc/usr/artifacts/ Artifact-A/ ... contents of Artifact-A Artifact-B/ ... contents of Artifact-B
將所有工件下載到目前工作目錄:
步驟: - 使用:actions/download-artifact@v4- name:顯示下載檔案的結構 運行: ls -R
將所有工件下載到特定目錄:
步驟: - 使用:actions/download-artifact@v4 with:path: path/to/artifacts- name: 顯示下載檔案的結構 運行: ls -R 路徑/到/工件
要將它們下載到同一目錄:
步驟: - 使用:actions/download-artifact@v4 with:path: path/to/artifactsmerge-multiple: true- name: 顯示下載檔案的結構 運行: ls -R 路徑/到/工件
這將導致:
path/to/artifacts/ ... contents of Artifact-A ... contents of Artifact-B
在多個 arch/os 場景中,您可能在不同的作業中建立了 Artifacts。若要將所有工件下載到相同目錄(或符合 glob 模式),您可以使用該pattern
並merge-multiple
輸入。
作業:上傳:策略:矩陣:執行:[ubuntu-最新,macos-最新,Windows-最新]運行:${{matrix.runs-on}}步驟: - name: 建立檔案 run: echo "hello from ${{ matrix.runs-on }}" > file-${{ matrix.runs-on }}.txt- name: 上傳工件使用:actions/upload-artifact @ v4 with:名稱:my-artifact-${{matrix.runs-on}}路徑:檔案-${{matrix.runs-on}}.txt 下載:需要:uploadruns-on:ubuntu-lateststeps: - 名稱:下載所有工件 使用:actions/download-artifact@v4 with:path: my-artifactpattern: my-artifact-*merge-multiple: true- run: ls -R my-artifact
這會產生一個像這樣的目錄:
my-artifact/ file-macos-latest.txt file-ubuntu-latest.txt file-windows-latest.txt
從其他工作流程運行甚至其他儲存庫下載工件可能很有用。預設情況下,權限是有範圍的,因此他們只能下載目前工作流程運行中的工件。若要提升此場景的權限,您可以指定github-token
以及其他儲存庫和執行識別碼:
步驟: - 使用:actions/download-artifact@v4 with:name: my-other-artifactgithub-token: ${{ Secrets.GH_PAT }} # 帶有 actions 的令牌:目標儲存庫的讀取權限: actions/toolkitrun-id: 1234
在工件上傳期間不會維護檔案權限。所有目錄將有755
,所有檔案將有644
。例如,如果您使用chmod
使文件可執行,然後上傳該文件,則下載後不再保證該文件已設定為可執行檔。
如果您必須保留權限,則可以在上傳工件之前將所有檔案tar
在一起。下載後, tar
檔案將保持檔案權限和區分大小寫。
- 名稱:“Tar 檔” 運行: tar -cvf my_files.tar /path/to/my/directory- name: '上傳工件' 使用:actions/upload-artifact@v4 與:名稱:my-artifactpath:my_files.tar