Ошибка конвейера Azure DevOps: пароль не является целым числом в команде SnowSQL

Я столкнулся с проблемой в конвейере 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'.

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

Что я пробовал:

  1. Подтвержденный секрет в Key Vault: секрет правильно хранится в Azure Key Vault.
  2. Проверил политику доступа: у принципала службы есть разрешения Get и List на секрет.
  3. Расширение используемой переменной: убедитесь, что переменная правильно расширена с помощью фигурных скобок.

Наблюдения

  • Когда я использую фигурные скобки для расширения переменных, пароль в сообщении об ошибке отображается пустым.
  • Когда я использую пароль в круглых скобках, он показывает фактический пароль, но приводит к той же ошибке.

Дополнительная информация:

  • Пароль содержит специальные символы.
  • Я проверил, что переменная среды установлена ​​правильно, распечатав ее перед запуском команды snowsql.

Вопрос

Как правильно передать пароль, полученный из Azure Key Vault, команде snowsql в моем конвейере Azure DevOps, не столкнувшись с ошибкой «не целое число»?

Спасибо за помощь!

Это агент Linux или Windows?

Rui Jarimba 02.06.2024 20:22

Это агент Linux.

DEicebergslim 02.06.2024 20:31
Как установить LAMP Stack - Security 5/5 на виртуальную машину Azure Linux VM
Как установить LAMP Stack - Security 5/5 на виртуальную машину Azure Linux VM
В предыдущей статье мы завершили установку базы данных, для тех, кто не знает.
Как установить LAMP Stack 1/2 на Azure Linux VM
Как установить LAMP Stack 1/2 на Azure Linux VM
В дополнение к нашему предыдущему сообщению о намерении Azure прекратить поддержку Azure Database для MySQL в качестве единого сервера после 16...
0
2
104
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

Рассмотрите установку переменных среды на уровне задачи — это может помочь избежать таких проблем, как кодировка, специальные символы и т. д.

Вместо указания пароля в командной строке:

- 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

Rui Jarimba 02.06.2024 20:44

все еще выдает следующую ошибку: Running Snowflake Initialization Scripts... *** is not a valid integer Try "snowsql --help" for more information.

DEicebergslim 02.06.2024 20:45

Попробуйте echo поместить переменную среды в файл, а затем использовать cat для отображения его содержимого и убедиться в правильности пароля.

Rui Jarimba 02.06.2024 20:47

Также попробуйте "${password}" вместо ${password} (если ваш пароль не содержит двойных кавычек ")

Rui Jarimba 02.06.2024 20:51

В логах видно Running Snowflake Initialization Scripts... Password content from file: *** *** is not a valid integer Try "snowsql --help" for more information.

DEicebergslim 02.06.2024 20:54

Спасибо, это сработало. Я отмечу это как решенное, но теперь я сталкиваюсь с ошибкой, где написано: 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 02.06.2024 21:31

@DEicebergslim это другая история :-)

Rui Jarimba 02.06.2024 21:38

-p — это параметр номера порта, а не пароля. В документации объясняется, как использовать пароли в SnowSQL: https://docs.snowflake.com/en/user-guide/snowsql-start#specifying-passwords-when-connecting

Ох, как я мог пропустить это в документации? -P (прописные буквы) — пароль, -p (строчные буквы) — номер порта — поэтому сообщение об ошибке было ... is not a valid integer.

Rui Jarimba 02.06.2024 21:36

Другие вопросы по теме