Как я могу использовать секретную переменную в задаче Azure Devops bash, которая может быть неопределенной

#bash #azure-devops #azure-pipelines #azure-keyvault

#bash #azure-devops #azure-конвейеры #azure-keyvault

Вопрос:

Я пытаюсь создать конфигурационный файл, используя задачу bash в Azure Devops. Переменные поступают из azure keyvault, поэтому я не знаю, какие переменные определены, а какие не определены.

 - script: |
    touch config.txt
    echo "1. $(MyDefinedVariable)" >> config.txt
    echo "2. $(MyUndefinedVariable)" >> config.txt
    cat config.txt
  

Поскольку MyUndefinedVariable не определено, конвейер не заменяет $(MyUndefinedVariable) , что приводит к ошибке bash MyUndefinedVariable: command not found .

Я попытался использовать env аргумент для использования переменных bash, но получаю ту же ошибку, поскольку «$ (MyUndefinedVariable)» передается в среду bash.

 - script: |
    touch config.txt
    echo "1. $MY_DEFINED_VARIABLE" >> config.txt
    echo "2. $MY_UNDEFINED_VARIABLE" >> config.txt
    cat config.txt
  env:
    MY_DEFINED_VARIABLE: $(MyDefinedVariable)
    MY_UNDEFINED_VARIABLE: $(MyUndefinedVariable)
  

Я просто хочу, чтобы неопределенные переменные разрешались в пустую строку, но не могу найти разумный способ сделать это.

Комментарии:

1. Как вы «не знаете, какие переменные определены, а какие не определены»? Это довольно важная информация.

2. @daniu У меня есть несколько разных сред с отдельными ключами, и некоторым средам просто не нужны все секреты. Я мог бы добавить пустые значения в keyvault для сред, которые не имеют значения, но я ищу решение, в котором неопределенное значение приводит к пустой строке вместо ошибки или неожиданно оставляет «$ (UndefinedVariable)» в качестве значения.

3. @Mike Monteith Не получил вашу последнюю информацию, если приведенный ниже ответ полезен, вы можете принять его как ответ , чтобы он мог помочь другим членам сообщества, у которых возникают те же проблемы, и мы могли бы заархивировать эту тему. Или, если у вас есть какие-либо опасения, не стесняйтесь поделиться ими, спасибо.

Ответ №1:

Все переменные, сопоставленные с Azure KeyVault, считаются секретными, поэтому необходимо сопоставление, подобное этому:

   env:
    MY_DEFINED_VARIABLE: $(MyDefinedVariable)
    MY_UNDEFINED_VARIABLE: $(MyUndefinedVariable)
  

Я боюсь, что если вы не знаете значений в вашем KeyVault, вам нужно использовать Azure CLI, чтобы проверить это. Для проверки всех секретных ключей вы можете использовать эту команду:

 az keyvault secret list [--id]
                        [--maxresults]
                        [--query-examples]
                        [--subscription]
                        [--vault-name]
  

Вы можете объединить этот CLI с задачей Azure CLI.

Комментарии:

1. Хорошо, таким образом, я могу вручную присвоить отсутствующим переменным пустую строку. Я предполагал, что будет более простой способ сделать это с помощью задачи KeyVault и отдельного сценария bash.

2. ИМХО. Да, нет. Если вы знаете, какие переменные вы можете ожидать, вы можете взять все ключи из хранилища ключей через cli, сравнить, установить те, которые не существуют в хранилище ключей. Но используйте задачу хранилища ключей для получения других. И помните о сопоставлении env.