Я столкнулся с проблемой в конвейере Azure DevOps: я пытаюсь запустить команду snowsql с паролем, полученным из Azure Key Vault. Конвейер правильно извлекает секрет, но когда я использую его в команде snowsql, я получаю сообщение об ошибке, сообщающее, что пароль не является целым числом.
Вот соответствующая часть моего сценария конвейера:
- script: |
export PATH=$PATH:~/snowflake
echo "Running Snowflake Initialization Scripts..."
~/snowflake/snowsql -a "$SNOWSQL_ACCOUNT" -u "$SNOWSQL_USER" -r "$SNOWSQL_ROLE" -w "$SNOWSQL_WAREHOUSE" -p "$(SnowflakePassword)" -f scripts/1_initialize_db.sql
displayName: 'Run Snowflake Initialization Scripts'
Сообщение об ошибке:
Running Snowflake Initialization Scripts...
<my snowflake secret password> is not a valid integer
Try "snowsql --help" for more information.
##[error]Bash exited with code '2'.
Я вижу секретное значение в ошибке, поэтому получаю его обратно. Просто не знаю, как обновить скрипт, чтобы он не фиксировался как целое число.
Что я пробовал:
Get и List на секрет.Наблюдения
Дополнительная информация:
snowsql.Вопрос
Как правильно передать пароль, полученный из Azure Key Vault, команде snowsql в моем конвейере Azure DevOps, не столкнувшись с ошибкой «не целое число»?
Спасибо за помощь!
Это агент Linux.


Рассмотрите установку переменных среды на уровне задачи — это может помочь избежать таких проблем, как кодировка, специальные символы и т. д.
Вместо указания пароля в командной строке:
- script: |
export PATH=$PATH:~/snowflake
echo "Running Snowflake Initialization Scripts..."
~/snowflake/snowsql ... -p "$(SnowflakePassword)" ...
displayName: 'Run Snowflake Initialization Scripts'
Попробуйте использовать переменную среды SNOWSQL_PWD, как указано в разделе Указание паролей при подключении:
- script: |
export PATH=$PATH:~/snowflake
echo "Running Snowflake Initialization Scripts..."
# snowsql command WITHOUT the -p option
~/snowflake/snowsql ...
displayName: 'Run Snowflake Initialization Scripts'
env:
SNOWSQL_PWD: $(SnowflakePassword) # <----------------- set environment variable
Связано: stackoverflow.com/a/78428911/558486
все еще выдает следующую ошибку: Running Snowflake Initialization Scripts... *** is not a valid integer Try "snowsql --help" for more information.
Попробуйте echo поместить переменную среды в файл, а затем использовать cat для отображения его содержимого и убедиться в правильности пароля.
Также попробуйте "${password}" вместо ${password} (если ваш пароль не содержит двойных кавычек ")
В логах видно Running Snowflake Initialization Scripts... Password content from file: *** *** is not a valid integer Try "snowsql --help" for more information.
Спасибо, это сработало. Я отмечу это как решенное, но теперь я сталкиваюсь с ошибкой, где написано: Running Snowflake Initialization Scripts... 250001 (n/a): Could not connect to Snowflake backend after 2 attempt(s).Aborting If the error message is unclear, enable logging using -o log_level=DEBUG and see the log to find out the cause. Contact support for further help. Goodbye!
@DEicebergslim это другая история :-)
-p — это параметр номера порта, а не пароля. В документации объясняется, как использовать пароли в SnowSQL: https://docs.snowflake.com/en/user-guide/snowsql-start#specifying-passwords-when-connecting
Ох, как я мог пропустить это в документации? -P (прописные буквы) — пароль, -p (строчные буквы) — номер порта — поэтому сообщение об ошибке было ... is not a valid integer.
Это агент Linux или Windows?