SJB*_*SJB 5 azure azure-powershell azure-devops
我正在为 Azure DevOps 管道中的新 Azure 存储帐户创建 CI/CD 配置管道,并尝试使用从管道中的 Azure Powershell 任务运行的 AzCopy 将一些文件上传到 Blob 存储。
该脚本在我的本地机器上成功运行,但在 Azure DevOps 管道中运行时,我收到以下错误(ErrorDateTime只是一个经过混淆的 ISO 8601 格式的日期时间):
我试过的...
我已经成功地从我的本地机器运行了脚本,我的 IP 地址在允许列表中。
如果我在存储帐户防火墙规则上启用“允许从所有网络访问”,则脚本将运行并且文件已成功上传。
似乎在自己的 VNet 中运行的 Azure 管道代理无权访问我的存储帐户,但我认为通过在防火墙设置中设置“允许受信任的 Microsoft 服务访问此存储帐户”可以满足该要求
我在 Azure Powershell 任务中使用以下行。我对这些值很满意,因为当“所有网络”或我的 IP 地址启用并且我在本地运行时,一切正常。
.\AzCopy.exe /Source:$SourcePath /Dest:$blobUrlDir /DestKey:$key /Pattern:$FilenamePattern /Y
Run Code Online (Sandbox Code Playgroud)
任何想法或指导将不胜感激。
谢谢,
SJB
在进一步研究之后,我注意到以下提出的问题 - 从存储帐户的角度来看,Azure DevOps 不被视为受信任的 Microsoft 服务。
我的临时解决方法是:
Try
{
Update-AzureRmStorageAccountNetworkRuleSet -ResourceGroupName "$ResourceGroupName" -Name "$StorageAccountName" -DefaultAction Allow
.\AzCopy.exe /Source:$SourcePath /Dest:$blobUrlDir /DestKey:$key /Pattern:$FilenamePattern /Y
}
Catch
{
#Handle errors...
}
Finally
{
Update-AzureRmStorageAccountNetworkRuleSet -ResourceGroupName "$ResourceGroupName" -Name "$StorageAccountName" -DefaultAction Deny
}
Run Code Online (Sandbox Code Playgroud)
谢谢,
SJB
人们似乎在这个 github 问题中得到了不同的结果,但是在将“存储 Blob 数据贡献者”角色添加到 ARM 连接的服务主体后,AzureFileCopy@4任务可以工作(至少对我们而言)。以下是将存储库部署为 blob 容器中的静态网站的管道中唯一必要的步骤:
- task: AzureFileCopy@4
displayName: 'Copy files to blob storage: $(storageName)'
inputs:
SourcePath: '$(build.sourcesDirectory)'
Destination: AzureBlob
storage: $(storageName)
ContainerName: $web
azureSubscription: 'ARM Connection goes here' # needs a role assignment before it'll work
Run Code Online (Sandbox Code Playgroud)
(当然,如果你像我们一样使用 Azure CDN,下一步是清除 CDN 端点的缓存,但这与 blob 存储错误无关)
| 归档时间: |
|
| 查看次数: |
3792 次 |
| 最近记录: |