Azure 檔案複製工作

Azure DevOps Services |Azure DevOps Server 2020 |Azure DevOps Server 2019 |TFS 2018

使用此工作可將檔案複製到 Microsoft Azure 儲存體 blob 或虛擬機器 (vm) 。

注意

這項工作是以 PowerShell 撰寫,因此只有在 Windows 代理程式上執行時才會運作。 如果您的管線需要 Linux 代理程式,且需要將檔案複製到 Azure 儲存體帳戶,請考慮 az storage blob 以替代方式在Azure CLI工作中執行命令。

注意

在 Microsoft Team Foundation Server (TFS) 2018 和舊版本中,組建和發行管線稱為定義執行稱為組建服務連接稱為服務端點階段稱為環境,以及作業稱為階段

此工作用來複製應用程式檔和其他必要的成品,以安裝應用程式。例如 PowerShell 腳本、PowerShell-DSC 模組等等。

注意

如果您使用 Azure 檔案複製工作第3版或更低版本,請參閱 azure file copy 第3版或更早版本。

當目標為 Azure Vm 時,會先將檔案複製到自動產生的 Azure blob 容器,然後下載至 Vm。 成功將檔案複製到 Vm 之後,就會刪除容器。

此工作會使用 AzCopy,此命令列公用程式是專為在 Azure 儲存體帳戶中快速複製資料所建立。 Azure 檔案複製工作的第4版會使用 AzCopy V10

若要動態部署包含虛擬機器的 Azure 資源群組,請使用 Azure 資源群組部署 工作。 這項工作有一個範例範本,可以執行必要的作業來設定虛擬機器上的 WinRM HTTPS 通訊協定、開啟防火牆中的5986埠,以及安裝測試憑證。

注意

如果您要部署至 Azure 靜態網站作為 blob 儲存體中的容器,您必須使用 第2版 或更高版本的工作,才能保留 $web 的容器名稱。

此工作支援以 Azure Active Directory 為基礎的驗證。 您可以使用服務主體和受控識別進行驗證。 針對受控識別,只支援全系統的受控識別。

注意

若為授權,您將必須提供安全性主體的存取權。 需要的授權層級可以在 這裡參考。

YAML 程式碼片段

# Azure file copy
# Copy files to Azure Blob Storage or virtual machines
- task: AzureFileCopy@4
  inputs:
    sourcePath: 
    azureSubscription: 
    destination: # Options: azureBlob, azureVMs
    storage: 
    #containerName: # Required when destination == AzureBlob
    #blobPrefix: # Optional
    #resourceGroup: # Required when destination == AzureVMs
    #resourceFilteringMethod: 'machineNames' # Optional. Options: machineNames, tags
    #machineNames: # Optional
    #vmsAdminUserName: # Required when destination == AzureVMs
    #vmsAdminPassword: # Required when destination == AzureVMs
    #targetPath: # Required when destination == AzureVMs
    #additionalArgumentsForBlobCopy: # Optional
    #additionalArgumentsForVMCopy: # Optional
    #enableCopyPrerequisites: false # Optional
    #copyFilesInParallel: true # Optional
    #cleanTargetBeforeCopy: false # Optional
    #skipCACheck: true # Optional
    #sasTokenTimeOutInMinutes: # Optional

引數

引數 描述
sourcePath - 必要。 要複製的檔案來源。 YAML Pipelines 和傳統版本也支援預先定義的系統變數,例如LocalPath版本變數 僅在傳統版本中受到支援。 萬用字元符號 ( * ) 在檔案路徑或檔案名中的任何位置都受到支援。
connectedServiceNameARMazureSubscription - Azure 訂用帳戶 必要。 針對目標 azure 服務、虛擬機器或儲存體帳戶所在的訂用帳戶所設定的Azure Resource Manager 服務連線名稱。 如需詳細資訊,請參閱Azure Resource Manager 總覽
destination - 目的地類型 必要。 檔案的目標目的地類型。 選擇 Azure Blobazure vm
storageAccountRMstorage - RM 儲存體帳戶 必要。 Azure 訂用帳戶中現有儲存體帳戶的名稱。
containerName - 容器名稱 如果您選取 Azure Blob 作為 目的地類型 參數,則為必要。 要將檔案複製到其中的容器名稱。 如果具有此名稱的容器不存在,則會建立一個新的容器。
blobPrefix - Blob 前置詞 如果您選取 [ Azure Blob ] 作為 目的地類型 參數,則為選擇性。 Blob 名稱的前置詞,可以用來篩選 blob。 例如,使用組建編號可在下載具有相同組建編號的所有 blob 時輕鬆進行篩選。
environmentNameRMresourceGroup - 資源群組 如果您為azure 連線類型參數選取azure Resource Manager ,並為目的地類型參數選取 azure vm ,則為必要。 虛擬機器執行所在的 Azure 資源組名。
resourceFilteringMethod - 選取機器依據 根據您在使用 篩選準則 參數時要如何指定群組中的電腦,請選擇 [ 電腦名稱稱 ] 或 [ 標記]。
machineNames - 篩選準則 選擇性。 電腦名稱稱或標籤名稱的清單,用來識別工作將設為目標的機器。 篩選準則可以是:
- Azure 資源群組的名稱。
-先前工作的輸出變數。
-標記名稱或電腦名稱稱的逗號分隔清單。
使用電腦名稱稱時的格式是以逗號分隔的電腦 Fqdn 或 IP 位址清單。
將篩選的標記名稱指定為 {TagName}{Value} 範例: Role:DB;OS:Win8.1
vmsAdminUserName - 系統管理員登入 如果您選取 Azure vm 作為 目的地類型 參數,則為必要。 具有所有目標 Vm 之系統管理許可權之帳戶的使用者名稱。
-支援 username、 usernamemachine-name\username.\username 等格式。
-不支援 UPN 格式 username@domain.com ,例如和內建系統帳戶(例如 NT Authority\System )。
vmsAdminPassword - 密碼 如果您選取 Azure vm 作為 目的地類型 參數,則為必要。 指定為 管理員登 入參數之帳戶的密碼。 在 [ 變數 ] 索引標籤中定義的變數使用掛鎖圖示來保護該值,並在此處插入變數名稱。
targetPath - 目的地資料夾 如果您選取 Azure vm 作為 目的地類型 參數,則為必要。 要將檔案複製到其中的 Azure Vm 中的資料夾。 支援和 $env:systemroot 之類 $env:windir 的環境變數。 範例:$env:windir\FabrikamFiber\Webc:\FabrikamFiber
additionalArgumentsForBlobCopy - 用來將檔案上傳至 blob) 的選擇性引數 ( 選擇性。 任何您想要傳遞給 AzCopy.exe 程式,以在上傳至 blob 並下載至 vm 時使用的引數。 如需詳細資料,請參閱使用 AzCopy 命令列公用程式傳輸資料。 如果您使用僅支援 Azure 分頁 blob 的進階版儲存體帳戶,請傳遞 '--blob-type = PageBlob ' 做為額外的引數。 預設引數是--log 層級 = INFO (預設) 和--只有在不 $root) 容器名稱時,才會 (遞迴。
additionalArgumentsForVMCopy - 將檔案下載至 VM) 的選擇性引數 ( 選擇性。 在下載至 VM (例如)時, --check-length=true 將會套用 AzCopy.exe 引數。 如果此處未指定任何選擇性引數,預設會加入下列選擇性引數: (如果管線是在設定 --log-level=DEBUG) 的 debug 模式下執行 --log-level=INFO--recursive
enableCopyPrerequisites - 啟用複製必要條件 如果您針對azure 連線類型參數選取azure Resource Manager ,並針對目的地類型參數選取 azure vm ,則可使用。 設定此選項會使用自我簽署憑證,在埠5986上使用 HTTPS 通訊協定設定 Windows 遠端管理 (WinRM) 接聽程式。 需要此設定,才能在 Azure 虛擬機器上執行複製作業。
-如果目標虛擬機器是透過負載平衡器存取,請確定已將輸入 NAT 規則設定為允許埠5986上的存取。
-如果目標虛擬機器與網路安全性群組相關聯 (NSG) ,請設定輸入安全性規則,以允許埠5986上的存取。
copyFilesInParallel - 平行複製 如果您選取 Azure vm 作為 目的地類型 參數,則可使用。 設定這個選項會讓程式以平行方式針對複製的檔案執行。 這可以大幅減少花費的整體時間。
cleanTargetBeforeCopy - 清除目標 如果您選取 Azure vm 作為 目的地類型 參數,則可使用。 設定這個選項會在複製程式開始之前,先刪除目的資料夾中的所有檔案。
skipCACheck - 測試憑證 如果您選取 Azure vm 作為 目的地類型 參數,則可使用。 將檔案從中繼儲存體 blob 複製到 Azure Vm 時,WinRM 需要使用憑證來進行 HTTPS 傳輸。 如果您設定了 [使用自我簽署的憑證],請設定此選項,以防止程式使用信任的憑證授權單位單位 (CA) 驗證憑證。
sasTokenTimeOutInMinutes - SAS 權杖到期期間(以分鐘為單位) 選擇性。 提供 SAS 權杖將到期的時間(分鐘)。 只有在選取的目的地為 Azure Blob 時才有效。 預設值應為4小時。
控制項選項 請參閱 控制項選項

常見問題集

使用這項工作有哪些 Azure PowerShell 必要條件?

工作需要在執行 automation 代理程式的電腦上安裝 Azure PowerShell。 建議的版本為1.0.2,但工作會使用版本0.9.8 和更高版本。 您可以使用Azure PowerShell 安裝程式 v 1.0.2來取得此程式。

這項工作的 WinRM 必要條件為何?

此工作會使用 Windows 遠端管理 (WinRM) HTTPS 通訊協定,將檔案從儲存體 blob 容器複製到 Azure vm。 這需要在 Vm 上設定 WinRM HTTPS 服務,並安裝適當的憑證。 在建立虛擬機器之後設定 WinRM

如果已建立 Vm 而未開啟 WinRM HTTPS 埠,請遵循下列步驟:

  1. 設定輸入存取規則,以允許每個 VM 的埠5986上的 HTTPS。
  2. 停用 UAC 遠端限制
  3. 使用簡單表單使用者 名稱 中的系統管理員層級登入,而不使用任何網域部分,指定工作的認證以存取 vm。
  4. 在執行自動化代理程式的電腦上安裝憑證。
  5. 如果您使用自我簽署憑證,請設定工作的 測試憑證 參數。

我應該選擇何種類型的服務連接?

  • 針對 azure Resource Manager 儲存體帳戶和 azure Resource Manager vm,請使用azure Resource Manager服務連線類型。 請參閱 使用服務主體自動化 Azure 資源群組部署的更多詳細資料。

  • 使用Azure Resource Manager服務連線類型時,此工作會自動篩選適當的較新 azure Resource Manager 儲存體帳戶和其他欄位。 例如,資源群組或雲端服務,以及虛擬機器。

如何? 建立學校或公司帳戶以搭配此工作使用嗎?

您可以輕鬆地建立適當的帳戶以用於服務連線:

  1. 使用 Azure 入口網站在 Azure Active Directory 中建立新的使用者帳戶。
  2. 將 Azure Active Directory 使用者帳戶新增至您 Azure 訂用帳戶中的共同管理員群組。
  3. 使用此使用者帳戶登入 Azure 入口網站並變更密碼。
  4. 請在服務連線中使用此帳戶的使用者名稱和密碼。 將會使用此帳戶來處理部署。

如果工作失敗,複製會繼續嗎?

由於 AzCopy V10 不支援日誌檔案,因此工作無法繼續進行複製作業。 您必須再次執行工作,才能複製所有檔案。

記錄檔和計畫檔案是否會在複製之後清除?

工作不會刪除記錄檔和計畫檔案。 若要確實清除檔案,您可以使用此命令在工作流程中新增 CLI 步驟。

是否需要代理程式?

您至少需要一個 代理程式 來執行您的組建或發行。

我遇到問題。 如何進行疑難排解?

請參閱 疑難排解組建和發行

我無法選取預設的代理程式組件區,也無法將組建或發行排在佇列中。 我要如何修正此問題?

請參閱 代理程式集區。

我的 NuGet 推送工作失敗,發生下列錯誤:「錯誤:無法取得本機簽發者憑證」。 我該怎麼辦?

您可以藉由新增受信任的根憑證來修正此問題。 您可以將環境變數新增 NODE_EXTRA_CA_CERTS=file 至組建代理程式,也可以在管線中新增工作 NODE.EXTRA.CA.CERTS=file 變數。 如需此變數的詳細資訊,請參閱 Node.js 檔 。 如需在管線中設定變數的指示,請參閱在 管線中設定變數

我使用 TFS 內部部署,而且沒有看到其中一些功能。 為什麼不用?

其中有些功能僅適用于Azure Pipelines ,但尚未在內部部署使用。 如果您已 升級至最新版本的 TFS,某些功能可在內部部署使用。

如何? 使用 Azure 檔案複製工作將檔案複製到沒有公用 IP 位址的 Azure 虛擬機器?

請確定您使用的是 Azure 檔案複製工作的第4版。 如果工作失敗,您可以新增組建步驟來執行命令 azcopy cp "source-file-path" "destination-file-path" ,以取代來源和目的地值。

禁止的錯誤:使用 Azure 檔案複製工作時,' AzCopy.exe 在將檔案上傳至 blob 儲存體時,結束了非零的結束代碼

裝載的代理程式會在每次觸發組建時隨機指派,因此 代理程式 IP 位址 在每次執行時都會不同。 如果這些 IP 位址不在您允許的 ip 清單中,Azure DevOps 與儲存體帳戶之間的通訊將會失敗。 在這種情況下,請遵循下列所述的步驟:

  1. 使用 Azure CLI 新增組建步驟,這會在執行時間識別 Microsoft 裝載的組建代理程式的 ip,並將該 ip 位址新增至 Azure 儲存體帳戶的網路規則中。
  2. 針對您的 Azure 儲存體帳戶執行組建步驟。
  3. 使用 Azure CLI 新增另一個組建步驟,這會從先前新增的 Azure 儲存體帳戶網路規則中移除組建代理程式的 IP 位址。

開放原始碼

這項工作開放原始碼在 GitHub 上。 歡迎您提供意見反應和投稿。