Я работаю с переменными среды VSTS и застрял с переменными секретного типа.
Я использую POSH-скрипт (файл) для генерации переменной (фактически для получения значения из хранилища ключей Azure и установки этого значения в переменную):
# Добавить в качестве параметра сценария на этапе выпуска
-ResourceGroupNameArg "$(ResourceGroupName)" -KeyVaultNameArg "$(KeyVaultName)" -KeyVaultSecretNameArg "$(KeyVaultSecretName)"
# Сам скрипт
Param(
[string]$ResourceGroupNameArg,
[string]$KeyVaultNameArg,
[string]$KeyVaultSecretNameArg
)
<...>
$secret = Get-AzureKeyVaultSecret -VaultName $KeyVaultNameArg -Name $KeyVaultSecretNameArg
$secretValue = $secret.SecretValueText
Write-Host "##vso[task.setvariable variable=SQLAdministratorPassword;issecret=true]$secretValue"
Здесь я могу передать в скрипт разные имена KeyVault (в соответствии с моими потребностями) - подставив переменные $ KeyVaultNameArg и $ KeyVaultSecretNameArg.
Для любых других переменных, настроенных с помощью ##vso[task.setvariable variable=
, я могу получить их, используя конструкцию $env:DatabaseName
(например, в другом скрипте POSH) или $(DatabaseName)
на этапе агента (с помощью агента Hosted 2017).
Однако для переменной issecret=true
или даже для созданной вручную переменной я не могу получить ее значения во время процесса развертывания выпуска.
![step-release](https://i.stack.imgur.com/Ye0KO.png)
Согласно этой статье,
Значения скрытых (секретных) переменных надежно хранятся на
сервер и не могут быть просмотрены пользователями после их сохранения. Во время
при развертывании служба управления выпусками дешифрует эти значения при
ссылки на задачи и передает их агенту через безопасный
HTTPS канал.
Таким образом, переменные IMO должны быть доступны для сценария (или даже этапа агента), несмотря на то, что они являются секретными.