AzureFileCopy@3 - Azure 檔案複製 v3 工作
將檔案複製到Azure Blob 儲存體或虛擬機器。
注意
Syntax
# Azure file copy v3
# Copy files to Azure Blob Storage or virtual machines.
- task: AzureFileCopy@3
inputs:
SourcePath: # string. Required. Source.
azureSubscription: # string. Alias: ConnectedServiceNameARM. Required. Azure Subscription.
Destination: # 'AzureBlob' | 'AzureVMs'. Required. Destination Type.
storage: # string. Alias: StorageAccountRM. Required. RM Storage Account.
#ContainerName: # string. Required when Destination = AzureBlob. Container Name.
#BlobPrefix: # string. Optional. Use when Destination = AzureBlob. Blob Prefix.
#resourceGroup: # string. Alias: EnvironmentNameRM. Required when Destination = AzureVMs. Resource Group.
#ResourceFilteringMethod: 'machineNames' # 'machineNames' | 'tags'. Optional. Use when Destination = AzureVMs. Select Machines By. Default: machineNames.
#MachineNames: # string. Optional. Use when Destination = AzureVMs. Filter Criteria.
#vmsAdminUserName: # string. Required when Destination = AzureVMs. Admin Login.
#vmsAdminPassword: # string. Required when Destination = AzureVMs. Password.
#TargetPath: # string. Required when Destination = AzureVMs. Destination Folder.
#AdditionalArgumentsForBlobCopy: # string. Optional Arguments (for uploading files to blob).
#AdditionalArgumentsForVMCopy: # string. Optional. Use when Destination = AzureVMs. Optional Arguments (for downloading files to VM).
#enableCopyPrerequisites: false # boolean. Optional. Use when Destination = AzureVMs. Enable Copy Prerequisites. Default: false.
#CopyFilesInParallel: true # boolean. Optional. Use when Destination = AzureVMs. Copy in Parallel. Default: true.
#CleanTargetBeforeCopy: false # boolean. Optional. Use when Destination = AzureVMs. Clean Target. Default: false.
#skipCACheck: true # boolean. Optional. Use when Destination = AzureVMs. Test Certificate. Default: true.
# Output
#outputStorageUri: # string. Storage Container URI.
#outputStorageContainerSasToken: # string. Storage Container SAS Token.
#sasTokenTimeOutInMinutes: # string. SAS Token Expiration Period In Minutes.
輸入
SourcePath
- 源
string
. 必要。
指定來源資料夾的絕對路徑,或本機電腦上的檔案,或 UNC 共用。 您可以使用預先定義的系統變數,例如 $(Build.Repository.LocalPath)
。 不支援包含萬用字元的名稱,例如 *.zip
。 您指定的值或運算式應該會傳回單一資料夾或檔案名。
azureSubscription
- Azure 訂用帳戶
輸入別名: ConnectedServiceNameARM
。 string
. 必要。
指定針對目標 Azure 服務、虛擬機器或儲存體帳戶所在訂用帳戶所設定的Azure Resource Manager服務連線名稱。 如需詳細資訊,請參閱 Azure Resource Manager概觀。
Destination
- 目的地類型
string
. 必要。 允許的值: AzureBlob
(Azure Blob) , AzureVMs
(Azure VM) 。
指定目的地類型。
storage
- RM 儲存體帳戶
輸入別名: StorageAccountRM
。 string
. 必要。
指定既有的 ARM 儲存體帳戶。 這是用來作為將檔案複製到 Azure VM 的媒介的儲存體帳戶。
ContainerName
- 容器名稱
string
. 當 Destination = AzureBlob
時為必要。
複製檔案的容器名稱。 如果指定的容器不存在於儲存體帳戶中,則會建立它。
若要在容器內建立虛擬目錄,請使用 Blob 前置詞輸入。 例如,針對目標位置 https://myaccount.blob.core.windows.net/mycontainer/vd1/vd2/
,指定容器名稱和 mycontainer
Blob 前置詞: vd1/vd2
。
BlobPrefix
- Blob 前置詞
string
. 選擇性。 使用 時機 Destination = AzureBlob
。
指定可用來篩選檔案的前置詞。
範例:您可以附加組建編號,以篩選所有具有相同組建編號之 Blob 的檔案。
範例:如果您指定 Blob 前置詞 myvd1
,則會在容器內建立虛擬目錄。 檔案會從來源 https://myaccount.blob.core.windows.net/mycontainer/myvd1/
複製到 。
resourceGroup
- 資源群組
輸入別名: EnvironmentNameRM
。 string
. 當 Destination = AzureVMs
時為必要。
指定將複製檔案的目標資源群組名稱。
ResourceFilteringMethod
- 選取電腦依據
string
. 選擇性。 使用 時機 Destination = AzureVMs
。 允許的值: machineNames
(電腦名稱稱) 、 tags
。 預設值:machineNames
。
指定 VM 主機名稱或標記,以識別資源群組中的 VM 子集。 僅透過 Azure Resource Manager建立的資源支援標籤。
MachineNames
- 篩選準則
string
. 選擇性。 使用 時機 Destination = AzureVMs
。
提供 VM 名稱或標記名稱的清單,以識別工作的目標 VM。 有效的篩選準則包括:
- Azure 資源群組的名稱。
- 上一個工作的輸出變數。
- 標記名稱或 VM 名稱的逗號分隔清單。
- 使用以逗號分隔的 FQDN 或 IP 位址清單格式化 VM 名稱。
- 將篩選的標記名稱格式化為
{TagName}:{Value}
。 範例:Role:DB;OS:Win8.1
、ffweb
、ffdb
或 標籤,例如Role:DB
、、Web
OS:Win8.1
。
注意:標籤的有效分隔符號包括 、 (逗號) 、: (冒號) 和 ; (分號) 。 提供多個標記時,工作只會在包含指定標籤的 VM 中執行。 根據預設,工作會在所有 VM 中執行。
vmsAdminUserName
- 管理員登入
string
. 當 Destination = AzureVMs
時為必要。
提供所有目標 VM 上具有系統管理許可權的帳戶使用者名稱。
- 支援的格式包括:
username
、domain\username
、machine-name\username
和.\username
。 - 不支援包含
username@domain.com
和 內建系統帳戶的 UPN 格式,例如NT Authority\System
。
vmsAdminPassword
- 密碼
string
. 當 Destination = AzureVMs
時為必要。
提供 VM 的系統管理員密碼。
有效的輸入包括組建或發行管線中定義的變數,例如 $(passwordVariable)
。 若要保護密碼,請將密碼標示為 secret
。
TargetPath
- 目的地資料夾
string
. 當 Destination = AzureVMs
時為必要。
指定將複製檔案之 Azure VM 中資料夾的路徑。
支援 和 等 $env:windir
$env:systemroot
環境變數。 範例:$env:windir\FabrikamFiber\Web
和 c:\FabrikamFiber
AdditionalArgumentsForBlobCopy
- 將檔案上傳至 Blob 的選擇性引數 ()
string
.
提供可在上傳至 Blob 時套用的其他引數 AzCopy.exe
,例如 /NC:10
。
如果未指定選擇性引數,預設會新增下列引數。
/Y
/SetContentType
/Z
/V
/S
- 當容器名稱不是$root
時新增 。/BlobType:page
-當指定的儲存體帳戶是進階帳戶時新增。/Pattern
- 當來源路徑為檔案時新增。 隨附于任何其他指定的選擇性引數。
AdditionalArgumentsForVMCopy
- 將檔案下載至 VM) 的選擇性引數 (
string
. 選擇性。 使用 時機 Destination = AzureVMs
。
提供可在下載至 VM 時套用的其他引數 AzCopy.exe
,例如 /NC:10
。
如果未指定選擇性引數,預設會新增下列專案。
/Y
/S
/Z
/V
enableCopyPrerequisites
- 啟用複製必要條件
boolean
. 選擇性。 使用 時機 Destination = AzureVMs
。 預設值:false
。
啟用時,請使用自我簽署憑證,在埠 5986 上設定 Windows 遠端系統管理 (WinRM) 接聽程式,而不是 HTTPS 通訊協定。 在 Azure VM 上執行複製作業的必要專案。 如果目標 VM 使用負載平衡器,請為目標埠設定輸入 NAT 規則, (5986) 。 僅適用于 ARM VM。 在與網路安全性群組相關聯的目標 VM (NSG) 上,設定輸入安全性規則以允許在埠 5986 上存取。
CopyFilesInParallel
- 平行複製
boolean
. 選擇性。 使用 時機 Destination = AzureVMs
。 預設值:true
。
指定 true
以平行方式將檔案複製到目標 VM。 使用此值可減少執行動作所花費的整體時間。
CleanTargetBeforeCopy
- 清除目標
boolean
. 選擇性。 使用 時機 Destination = AzureVMs
。 預設值:false
。
將此值設定為 true
在執行複製動作之前清除目的地資料夾。
skipCACheck
- 測試憑證
boolean
. 選擇性。 使用 時機 Destination = AzureVMs
。 預設值:true
。
在透過 HTTPS 連線之前,預設值不會驗證伺服器憑證是否已由受信任的 CA 簽署。
outputStorageUri
- 儲存體容器 URI
string
.
指定用於複製檔案之儲存體容器 URI 的變數名稱。 只有在選取的目的地是 Azure Blob 時才有效。
outputStorageContainerSasToken
- 儲存體容器 SAS 權杖
string
.
指定儲存體容器 SAS 權杖所使用的變數名稱,以存取複製的檔案。 使用此變數作為後續工作的輸入。 根據預設,SAS 權杖會在 4 小時後到期。
sasTokenTimeOutInMinutes
- SAS 權杖到期期間,以分鐘為單位
string
.
指定 SAS 權杖到期的分鐘數。 只有在選取的目的地是 Azure Blob 時才有效。
工作控制選項
除了工作輸入之外,所有工作都有控制選項。 如需詳細資訊,請參閱 控制項選項和一般工作屬性。
輸出變數
無。
備註
版本AzureFileCopy@3的新功能
AzureFileCopy@3支援 Az Module,並停止支援 Azure 傳統服務端點。
此工作可用來複製安裝應用程式所需的應用程式檔和其他成品,例如 PowerShell 腳本、PowerShell-DSC 模組等等。
當目標為 Azure VM 時,檔案會先複製到自動產生的 Azure Blob 容器,然後下載到 VM。 成功將檔案複製到 VM 之後,就會刪除容器。
此工作會使用 AzCopy,這是建置的命令列公用程式,可快速將資料從 Azure 儲存體帳戶複製到 Azure 儲存體帳戶中。 工作第 3 版或更新版本使用 AzCopy V7。
若要動態部署包含虛擬機器的 Azure 資源群組,請使用 Azure 資源群組部署 工作。 此工作具有範例範本,可執行必要的作業,在 VM 上設定 WinRM HTTPS 通訊協定、在防火牆中開啟埠 5986,以及安裝測試憑證。
注意
如果您要部署至 Azure 靜態網站作為 Blob 儲存體中的容器,請使用 第 2 版 或更新版本來保留 $web 容器名稱。
常見問題集
使用這項工作的Azure PowerShell必要條件為何?
此工作需要在執行自動化代理程式的電腦上安裝Azure PowerShell。 建議的版本是 1.0.2,但工作適用于 0.9.8 版和更新版本。 使用Azure PowerShell Installer v1.0.2來取得建議的版本。
這項工作的 WinRM 必要條件為何?
此工作會使用 WinRM HTTPS 通訊協定,將檔案從儲存體 Blob 容器複製到 Azure VM。 必須在 VM 上設定 WinRM HTTPS 服務,並安裝適當的憑證。
如果建立 VM 而不開啟 WinRM HTTPS 埠,請遵循下列步驟:
- 設定輸入存取規則,以允許每個 VM 埠 5986 上的 HTTPS。
- 停用 UAC 遠端限制。
- 指定工作認證,以使用格式化為 使用者 名稱的系統管理員層級登入來存取 VM,而不需參考任何網域。
- 在執行自動化代理程式的電腦上安裝憑證。
- 為自我簽署憑證設定工作的 [測試憑證 ] 參數。
我應該選擇哪種類型的服務連線?
下表列出儲存體帳戶類型和相關聯的服務連線。 若要識別儲存體帳戶是以傳統 API 或Resource Manager API 為基礎,請登入Azure 入口網站並搜尋傳統) 或儲存體帳戶 (儲存體帳戶。
儲存體帳戶類型 | TFS/TS 中的 Azure 服務連線 |
---|---|
Resource Manager | Azure Resource Manager 服務連線 |
傳統 | 使用學校或公司帳戶與憑證型或認證型驗證的 Azure 服務連線 |
針對 Azure 傳統資源,請使用具有憑證或認證型驗證的 Azure 服務連線類型。 如果您使用認證型驗證,請確定認證適用于 學校或公司帳戶。 不支援和
joe@hotmail.com
之類的joe@live.com
Microsoft 帳戶。針對 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
角色指派給應用程式註冊身分識別。
從現有的繼承專案複製應用程式身分識別,因為 Contributor
您會在 IAM 窗格中看到,並在 UI 中 Add role assignment
明確搜尋它。 身分識別未列在下拉式清單中,您必須搜尋其識別碼。
如果我的資源群組同時包含傳統和Resource Manager VM,會發生什麼事?
如果指定的資源群組同時包含 Azure Resource Manager 和傳統 VM,則目標 VM 集合取決於連線類型。
- 對於憑證型連線和認證型連線,複製作業只會在傳統 VM 上執行。
- 針對以服務主體名稱為基礎的連線,複製作業只會在Resource Manager VM 上執行。
如何?建立學校或公司帳戶以用於這項工作?
您可以輕鬆地建立適當的帳戶,以用於服務連線:
- 使用 Azure 入口網站 在 Azure Active Directory 中建立新的使用者帳戶。
- 將 Azure Active Directory 使用者帳戶新增至 Azure 訂用帳戶中的共同管理員群組。
- 使用此使用者帳戶登入Azure 入口網站,並變更密碼。
- 在服務連線中使用此帳戶的新認證。 將會使用此帳戶來處理部署。
範例
# Example: Upload files from Pipeline staging directory to blob storage.
- task: AzureFileCopy@3
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