代码之家  ›  专栏  ›  技术社区  ›  DEicebergslim

Azure DevOps管道错误:snowsql命令中的密码不是整数

  •  0
  • DEicebergslim  · 技术社区  · 1 年前

    我的Azure DevOps管道遇到问题,我正试图运行 snowsql 具有从Azure密钥保管库检索到的密码的命令。管道正确地检索机密,但当我在 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. 密钥库中已验证的秘密:该秘密正确存储在Azure密钥库中。
    2. 已检查访问策略:服务主体具有 Get List 机密的权限。
    3. 已用变量展开:确保使用大括号正确展开变量。

    观察

    • 当我使用花括号进行变量扩展时,密码在错误消息中显示为空。
    • 当我使用带圆括号的密码时,它会显示实际密码,但会导致相同的错误。

    附加信息:

    • 密码包含特殊字符。
    • 在运行之前,我已经通过打印环境变量来验证环境变量设置是否正确 snowsql 命令

    问题

    如何将从Azure密钥保管库检索到的密码正确传递到 snowsql 命令,而不会遇到“非整数”错误?

    谢谢你的帮助!

    2 回复  |  直到 1 年前
        1
  •  2
  •   NickW    1 年前

    -p是端口号的参数,而不是密码。该文档解释了如何在SnowSQL中使用密码: https://docs.snowflake.com/en/user-guide/snowsql-start#specifying-passwords-when-connecting

        2
  •  1
  •   Rui Jarimba    1 年前

    考虑 setting environment variables at the task level -这可能有助于避免诸如编码、特殊字符等问题。

    不要在命令行中指定密码:

    - script: |
        export PATH=$PATH:~/snowflake
        echo "Running Snowflake Initialization Scripts..."
    
        ~/snowflake/snowsql ... -p "$(SnowflakePassword)" ...
      displayName: 'Run Snowflake Initialization Scripts'
    

    尝试使用 SNOWSQL_PWD 环境变量,根据 Specifying passwords when connecting :

    - 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