Azure 檔案複製工作第3版或更早版本

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

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

注意

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

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

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

此工作會使用 AzCopy,此命令列公用程式是專為在 Azure 儲存體帳戶中快速複製資料所建立。 工作第3版或更低版本使用 AzCopy V7。

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

注意

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

YAML 程式碼片段

# Azure file copy
# Copy files to Azure Blob Storage or virtual machines
- task: AzureFileCopy@3
  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
    #outputStorageUri: # Optional
    #outputStorageContainerSasToken: # Optional
    #sasTokenTimeOutInMinutes: # Optional
# Example: Upload files from Pipeline staging directory to blob storage.
- task: AzureFileCopy@2
  displayName: 'Example Step Name
  inputs:
    sourcePath: '$(Build.ArtifactStagingDirectory)/BlobsToUpload'
    additionalArgumentsForBlobCopy: |
      '/Y' # Supresses all AZCopy Confirmations. Used here to allow overwrites
      '/Pattern:*' # Pattern of files to copy.
      '/S' # Recursive Copy
    azureSubscription: 'Subscription Name'
    destination: AzureBlob
    storage: storageaccountname
    containerName: storagecontainername
    blobPrefix: targetdirectoryincontainer

引數

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

開放原始碼

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

常見問題集

使用這項工作有哪些 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 服務,並安裝適當的憑證。

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

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

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

下表列出儲存體帳戶和與其搭配使用的服務連接。 若要識別儲存體帳戶是否以傳統 api 或 Resource Manager api 為基礎,請登入Azure 入口網站,然後流覽儲存體帳戶 (傳統) 儲存體帳戶

儲存體帳戶類型 TFS/TS 中的 Azure 服務連接
Resource Manager Azure Resource Manager 服務連線
傳統 使用學校或公司帳戶進行以憑證為基礎或以認證為基礎之驗證的 Azure 服務連線
  • 針對 Azure 傳統資源,請使用 azure 服務連線類型搭配憑證或以認證為基礎的驗證。 如果您使用以認證為基礎的驗證,請確定認證適用于 學校或公司帳戶。 不支援 Microsoft 帳戶(例如 joe@live.comjoe@hotmail.com )。

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

  • 如果您使用azure Resource Manager服務連線類型,或具有以憑證為基礎之驗證的azure服務連線類型,此工作會自動篩選適當的傳統儲存體帳戶、較新的 Azure Resource Manager 儲存體帳戶和其他欄位。 例如,資源群組或雲端服務,以及虛擬機器。

  • 注意:目前具有以認證為基礎之驗證的 Azure 服務連線類型不會篩選儲存體、資源群組或雲端服務,以及虛擬機器欄位。

如何? 修正失敗「403:此要求未獲授權,無法使用此許可權執行這項作業」?

當 Azure DevOps 建立並授權服務連線至 Azure 時,它會在您訂用帳戶的 Active Directory 中建立應用程式註冊。 此身分識別會自動新增 Contributor 至您選擇要授權之資源群組中的所有資源。 為了將 blob 上傳至儲存體帳戶, Contributor不足夠。 您必須手動將角色指派Storage Blob Data Contributor 給應用程式註冊身分識別

您可以從現有繼承的專案中複製應用程式識別,就像您會在 IAM 窗格中看到的一樣 Contributor ,然後在 UI 中 Add role assignment 明確搜尋它。 請注意,身分識別 會列在下拉式清單中,您必須搜尋其識別碼。

如果我的資源群組同時包含傳統和 Resource Manager vm,會發生什麼事?

如果指定的資源群組同時包含 Azure Resource Manager 和傳統 vm,則將設為目標的 vm 集合取決於連線類型。 若是以憑證為基礎的連線和以認證為基礎的連線,則只會在傳統 Vm 上執行複製作業。 針對服務主體名稱型連接,只會在 Resource Manager vm 上執行複製作業。

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

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

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

是否需要代理程式?

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

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

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

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

請參閱 代理程式集區。

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

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

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

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