Ошибка «Не удалось получить контекст хранилища» при использовании Set-AzureStorageBlobContent в задаче VSTS Azure Powershell - PullRequest
0 голосов
/ 21 ноября 2018

Я использую задачу Azure Powershell в конвейере Azure (VSTS), чтобы попытаться загрузить файл в контейнер Azure Classic.
В процессе настройки задачи Azure Powershell (версия 3.1.10) я добавилподписка Azure Classic, в которой этот контейнер находится, для параметров проекта \ подключений к службам: service connection

Затем я выбираю эту подписку в конвейерной задаче: select subscription

Когда я выполняю сценарий, журналы, кажется, показывают, что задача одновременно устанавливает и выбирает ожидаемую подписку:
logs

Однако,если я не создаю (повторно) не создаю и не передаю AzureStorageContext в функцию Set-AzureStorageBlobContent, задача завершается ошибкой:

[error]Could not get the storage context. Please pass in a storage context or set the current storage context.

Это ожидаемое поведение?
Есть ли какой-нибудь способ повторно создать и передать контекст, когда кажется, что он уже существует?

Например, существует ли переменная среды, которая может содержать контекстэто было автоматически создано / выбрано, что я могу просто передать?

Обновление: Я подозреваю, что если вызов Select-AzureSubscription, замеченный в журналах, использовал ключ -Current, этобудет работать, как я ожидаю.Однако, поскольку эта команда автоматически запускается без возможности ее настройки с помощью задачи конвейера, она не поддается проверке.
Возможно, это должен быть запрос функции?

Выдержки из сценария:

#Not passing in the context results in the error
Set-AzureStorageBlobContent -File "$file" -Blob "$blobpath/$blah" -Container $blobname -Properties $properties -Force

#Passing in the context works:  
$azureKey = Get-AzureStorageKey "$accountName"
$storagekey = [string]$azureKey.Primary
$context = New-AzureStorageContext "$accountName" -StorageAccountKey $storagekey  
Set-AzureStorageBlobContent -File "$file" -Blob "$blobpath/$blah" -Container $blobname -Properties $properties -Context $context -Force

1 Ответ

0 голосов
/ 22 ноября 2018

Хотя мне, вероятно, следует просто удалить этот вопрос (после обнаружения «ответа»), я полагаю, что я предоставлю то, что нашел после дополнительной отладки и т. Д.

TLDR; -По большей части я не понимаю концепцию, согласно которой подписка Azure (контекст) не соотносится с хранилищем Azure (контекст).

Это ожидаемое поведение?

Да,Просто наличие текущей установленной подписки не означает, что в данный момент установлен контекст хранения.

Приходите, чтобы узнать, что у нашей компании есть несколько учетных записей хранения в подписке, которую я использовал.
Может быть, если подписка имеет только одну учетную запись хранения, функция будет выполнена успешно без указания контекста?Может быть, я исследую это позже.

Можно ли как-то заново создать и передать контекст, когда выясняется, что он уже существует?

Нет (возможно, из-за нескольких учетных записей хранения в подписке).
Мне нужно будет указать / выбрать текущий контекст хранения из текущей подписки (как я делал в части «Передача в контексте работает» в моем вопросе).

Вот как я пришел к этому:
Сначала я проверил, что на самом деле было установлено (если что-нибудь) в качестве текущего контекста [подписки], а затемявно (пере) установка.
Выполнение команды все еще не удалось.
Итак, подписка не была установлена ​​(так как она была).

$current = (Get-AzureSubscription -Current).SubscriptionName
Write-Host "current subscription is $current"

$setCurrent = $false
Write-Host "setCurrent is $setCurrent"
$setCurrent = Select-AzureSubscription -Current -SubscriptionName "CDN Subscription" -PassThru
if ($setCurrent)
{
  Write-Host "current set"
  $current = (Get-AzureSubscription -Current).SubscriptionName
  Write-Host "current subscription is $current"
}
else
{
  Write-Host "current not set"
}  

output_1

Затем меня осенило, что, возможно, «подписка» не соответствует «хранилищу».Чтобы убедиться в этом, я запустил следующее:

$current = (Get-AzureSubscription -Current).SubscriptionName
Write-Host "current subscription is $current"

$table = Get-AzureStorageAccount | Format-Table -AutoSize -Property @{Label="Name";Expression={$_.StorageAccountName}},"Label","Location" | Out-String
Write-Host "$table"

Результат - 4 учетных записи хранения в подписке.Поэтому мне нужно будет указать аккаунт, который я хочу загрузить на

table

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...