我正在为Azure DevOps管道中的新Azure存储帐户创建CI / CD设置管道,并尝试使用从管道中的Azure Powershell任务运行的AzCopy将某些文件上传到Blob存储中。
脚本从我的本地计算机成功运行,但是在Azure DevOps管道中运行时,出现以下错误( ErrorDateTime 只是混淆的ISO 8601格式的日期时间):
我尝试过的...
我已经从本地计算机成功运行了脚本,并且IP地址在允许的列表中。
如果我在存储帐户防火墙规则上启用了“允许来自所有网络的访问”,则脚本将运行并且文件已成功上传。
似乎在其自己的VNet中运行的Azure Pipeline代理无法访问我的存储帐户,但我认为可以通过设置“允许受信任的Microsoft Services访问此存储帐户来满足要求” “在防火墙设置中
我在Azure Powershell任务中使用以下行。我对这些值感到满意,因为当“所有网络”或我的IP地址启用并在本地运行时,一切正常。
.\AzCopy.exe /Source:$SourcePath /Dest:$blobUrlDir /DestKey:$key /Pattern:$FilenamePattern /Y
任何想法或指导将不胜感激。
谢谢
SJB
答案 0 :(得分:2)
人们似乎在this github issue中得到了不同的结果,但是在将“ Storage 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
(当然,如果您像我们一样使用Azure CDN,下一步就是清除CDN终结点的缓存,但这与Blob存储错误无关)
答案 1 :(得分:1)
做进一步的研究后,我注意到了以下提出的问题-从存储帐户的角度来看,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
}
谢谢
SJB
答案 2 :(得分:0)
您是否考虑过使用Azure DevOps任务“ Azure File Copy”代替Powershell脚本? 参见:https://docs.microsoft.com/en-us/azure/devops/pipelines/tasks/deploy/azure-file-copy?view=azure-devops