You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Azure DevOps的Azure CLI任务中用AzCopy复制Blob最新备份文件至另一账户

在Azure DevOps流水线中用AzCopy复制存储账户内的最新备份文件

核心思路

先通过Azure CLI命令筛选出备份文件夹内的最新Blob,再用AzCopy将该Blob复制到目标存储账户。以下是具体实现步骤:


1. 配置Azure CLI任务基础信息

在Azure DevOps流水线中添加Azure CLI任务,选择对应的Azure订阅,设置脚本类型为Bash或PowerShell(按需选择)。


2. 脚本实现(Bash版本)

# 替换为你的实际资源信息
SOURCE_STORAGE_ACCOUNT="your-source-storage-account"
SOURCE_CONTAINER="your-source-container"
BACKUP_FOLDER="backup/folder/path/" # 注意末尾斜杠,确保匹配文件夹下的所有文件
TARGET_STORAGE_ACCOUNT="your-target-storage-account"
TARGET_CONTAINER="your-target-container"
TARGET_FOLDER="target/backup/path/"

# 获取备份文件夹内的最新Blob(排除文件夹类型,按最后修改时间倒序取第一个)
LATEST_BLOB=$(az storage blob list \
  --account-name $SOURCE_STORAGE_ACCOUNT \
  --container-name $SOURCE_CONTAINER \
  --prefix $BACKUP_FOLDER \
  --query "[?properties.contentType!='application/x-directory'] | sort_by(@, &properties.lastModified)[-1].name" \
  --output tsv)

# 校验是否获取到有效Blob
if [ -z "$LATEST_BLOB" ]; then
  echo "Error: 未在备份文件夹中找到有效备份文件"
  exit 1
fi

# 使用AzCopy复制最新Blob到目标存储账户
az copy copy \
  "https://$SOURCE_STORAGE_ACCOUNT.blob.core.windows.net/$SOURCE_CONTAINER/$LATEST_BLOB" \
  "https://$TARGET_STORAGE_ACCOUNT.blob.core.windows.net/$TARGET_CONTAINER/$TARGET_FOLDER$(basename $LATEST_BLOB)" \
  --recursive=false

3. 脚本实现(PowerShell版本)

# 替换为你的实际资源信息
$sourceStorageAccount = "your-source-storage-account"
$sourceContainer = "your-source-container"
$backupFolder = "backup/folder/path/"
$targetStorageAccount = "your-target-storage-account"
$targetContainer = "your-target-container"
$targetFolder = "target/backup/path/"

# 获取备份文件夹内的最新Blob
$latestBlob = az storage blob list `
  --account-name $sourceStorageAccount `
  --container-name $sourceContainer `
  --prefix $backupFolder `
  --query "[?properties.contentType!='application/x-directory'] | sort_by(@, &properties.lastModified)[-1].name" `
  --output tsv

# 校验是否获取到有效Blob
if (-not $latestBlob) {
  Write-Error "未在备份文件夹中找到有效备份文件"
  exit 1
}

# 使用AzCopy复制最新Blob
az copy copy `
  "https://$sourceStorageAccount.blob.core.windows.net/$sourceContainer/$latestBlob" `
  "https://$targetStorageAccount.blob.core.windows.net/$targetContainer/$targetFolder$(Split-Path $latestBlob -Leaf)" `
  --recursive:$false

关键细节说明

  • 过滤文件夹:?properties.contentType!='application/x-directory' 用于排除备份文件夹下的子目录,只保留实际备份文件
  • 排序逻辑:sort_by(@, &properties.lastModified)[-1] 按Blob的最后修改时间倒序排序,取最后一个即为最新文件;如果备份文件的生成时间更准确,可替换为properties.creationTime
  • 文件名匹配:如果备份文件有特定后缀(如.bak、.zip),可在query中添加过滤条件,例如:[?properties.contentType!='application/x-directory' && contains(name, '.bak')]
  • 权限验证:Azure CLI任务使用服务主体授权时,需确保服务主体拥有源存储账户的Storage Blob Data Reader权限,以及目标存储账户的Storage Blob Data Contributor权限

内容的提问来源于stack exchange,提问作者Elliot

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.29 11:21:31