В настоящее время я использую Azure Devops для развертывания контейнера приложения в Azure.
Я создал конвейер выпуска и добавил каждую ПЕРЕМЕННУЮ СРЕДУ в группу переменных.
Чтобы динамически вызывать переменные среды, используемые ниже команд CLI в задаче Azure CLI.
#!/bin/bash
# Initialize variable
ENV_VARS = ""
# Loop through all environment variables
while IFS= read -r var
do
# Check if the variable contains __ and starts with specific prefixes
if [[ "$var" == APPSETTINGS__* || "$var" == AWSS3CONFIG__* || "$var" == CONNECTIONSTRINGS__* || "$var" == SMTPSETTINGS__* ]]; then
# Extract the variable name and value
name=$(echo "$var" | cut -d '=' -f 1 | sed 's/^//')
value=$(echo "$var" | cut -d '=' -f 2-)
if [[ "$value" == *" "* ]]; then
value = "\"$value\""
fi
# Append the variable and its value to the result
ENV_VARS+ = "$name=$value "
fi
done <<< "$(env)"
echo "Constructed envVars: $ENV_VARS"
# Example command using constructed envVars
az containerapp update \
--name api-dev \
--resource-group resource-group \
--image dev.azurecr.io/api:$(Build.BuildId) \
--set-env-vars "$ENV_VARS"
Но строка подключения к базе данных установлена неправильно, и из-за пробелов она считается новым ключом. например Идентификатор пользователя и постоянная информация о безопасности.
Как избежать пустого пространства? Пожалуйста помоги!
Я пробовал установить значение в виде двойной кавычки для переменной, хранящейся в группе переменных, а также непосредственно в скрипте, но ни один из них не работает.
Вы можете передавать переменные среды тремя способами.
Просто устанавливаю их
экспортировать COOKIE=клубника
Поместите их перед программой, которую вы выполняете.
COOKIE1=шоколад COOKIE2=арахис bash -c 'set | grep КУКИ'
Или, если вы создаете набор строк, как вы, используйте «eval»
eval 'экспорт COOKIE1=кокос; экспорт COOKIE2=овсянка' набор | grep КУКИ
Спасибо, Рен Хук, Eval работает, пока я делал строку.
Пожалуйста. Если это ответ на ваш вопрос, отметьте это как принятое решение.
Глупый вопрос: действительно ли нужно делать это динамически? Это может дать вам некоторую гибкость и в конечном итоге позволит вам повторно использовать сценарий для разных сценариев, но, с другой стороны, вам нужно быть особенно осторожным при обработке специальных символов кодирования/экранирования и т. д.