@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: # 要下載的工件的名稱。 # 如果未指定,則下載執行的所有工件。 # 選修的。 name: # 目標路徑。支援基本波浪線擴展。 # 選修的。預設為 $GITHUB_WORKSPACE 路徑: # 應下載的工件的全域模式。 # 如果指定了名稱則忽略。 # 選修的。 pattern: # 當多個工件符合時,這會變更目標目錄的行為。 # 如果為 true,下載的工件將位於路徑指定的相同目錄中。 # 如果為 false,下載的工件將被提取到指定路徑內的單獨命名目錄中。 # 選修的。預設值為 'false' merge-multiple: # 用於透過 GitHub API 進行驗證的 GitHub 令牌。 # 從不同的儲存庫或不同的工作流程執行下載工件時,這是必需的。 # 選修的。如果未指定,則該操作將從目前儲存庫和目前工作流程執行下載工件。 github-token: # 儲存庫擁有者和儲存庫名稱透過「/」連接在一起。 # 如果指定了 github-token,則這是將從中下載工件的儲存庫。 # 選修的。預設為 ${{ github.repository }} repository: # 上傳所需下載工件的工作流程執行的 ID。 # 如果指定了 github-token,則這是將從中下載工件的運行。 # 選修的。預設為 ${{ github.run_id }} 運行 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-artifact path: your/destination/dir- name: 顯示下載檔案的結構 run: ls -R your/destination/dir
如果未提供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 path/to/artifacts
要將它們下載到同一目錄:
步驟: - 使用:actions/download-artifact@v4 with:path:path/to/artifacts merge-multiple:true- name:顯示下載檔案的結構運作:ls -R path/to/artifacts
這將導致:
path/to/artifacts/ ... contents of Artifact-A ... contents of Artifact-B
在多個 arch/os 場景中,您可能在不同的作業中建立了 Artifacts。若要將所有工件下載到相同目錄(或符合 glob 模式),您可以使用該pattern
並merge-multiple
輸入。
作業:上傳:策略:矩陣:執行:[ubuntu-latest,macos-latest,windows-latest]執行:${{matrix.runs-on}}步驟: - name: 建立一個檔案 run: echo "hello from ${{ matrix.runs-on }}" > file-${{ matrix.runs-on }}.txt - 名稱:上傳工件使用:actions/upload-artifact@v4 with:名稱:my-artifact-${{matrix.runs-on}}路徑:file-${{matrix.runs-on}}.txt下載:需求:上傳運行:ubuntu-最新步驟: - 名稱:下載所有工件 使用:actions/download-artifact@v4 與:路徑:my-artifact 模式:my-artifact-* merge-multiple:true - 運行: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-artifact github-token: ${{ Secrets.GH_PAT }} # token with actions: 對目標儲存庫的讀取權限: actions/toolkit run- id: 1234
在工件上傳期間不會維護檔案權限。所有目錄將有755
,所有檔案將有644
。例如,如果您使用chmod
使文件可執行,然後上傳該文件,則下載後不再保證該文件已設定為可執行檔。
如果您必須保留權限,則可以在上傳工件之前將所有檔案tar
在一起。下載後, tar
檔案將保持檔案權限和區分大小寫。
- name: 'Tar files' run: tar -cvf my_files.tar /path/to/my/directory- name: 'Upload Artifact' 使用: actions/upload-artifact@v4 with: name: my-artifact path: my_files.焦油