GitHub Action中schemachange的Snowflake OAuth认证报错求助
问题排查与修复
核心错误原因
报错TypeError: 'NoneType' object is not subscriptable的本质是:
schemachange未接收到--oauth-config参数,导致内部oauth_config变量为None,后续尝试访问其键值时触发错误。
具体问题点
- 命令换行错误:
--vars参数所在行末尾未加反斜杠\,shell将后续的--oauth-config识别为独立命令,而非schemachange的参数。 - JSON格式错误:
- 键名不符:schemachange要求令牌提供者URL的键为
token-provider-url,而非你写的url - 语法冗余:
client_id字段多写了CLIENT_ID:前缀 - 引号冲突:
grant_type使用单引号,与外层包裹JSON的单引号截断了字符串 - 结构不完整:JSON结尾缺少闭合的
}
- 键名不符:schemachange要求令牌提供者URL的键为
修复后的流水线步骤
将schemachange执行步骤替换为以下内容:
- name: Run schemachange to deploy the snowflake Stored Procedures run: | schemachange -f ${{ github.workspace }}/code/schemachange/stored_procedure \ -a $SF_ACCOUNT \ -r $SF_ROLE \ -u $SF_USERNAME \ -w $SF_WAREHOUSE \ -d $SF_DATABASE \ -c $SF_DATABASE.MRVWORK_DNA_DISCOVER.CLAIM_SCHEMACHANGE_CHANGE_HISTORY --create-change-history-table \ --vars '{"schema_ai_model": "${{vars.SCHEMA_AI_MODEL}}", "schema_feature_store": "${{vars.SCHEMA_FEATURE_STORE}}", "schema_report": "${{vars.SCHEMA_REPORT}}"}' \ --oauth-config '{"token-provider-url": "$AZURE_ORG_GUID", "headers": {"Content-Type": "application/x-www-form-urlencoded", "User-Agent": "python/schemachange"}, "data": {"client_id": "$CLIENT_ID", "client_secret": "$CLIENT_SECRET", "grant_type": "client_credentials", "scope": "$SCOPE_URL_TEST"}}'
修复细节说明
- 给
--vars行末尾添加反斜杠\,确保所有参数属于同一个schemachange命令 - 将URL键名改为
schemachange要求的token-provider-url - 移除
client_id字段的冗余前缀,修正JSON结构 - 将
grant_type的单引号改为双引号,避免字符串截断 - 直接引用已定义的环境变量(如
$AZURE_ORG_GUID),简化命令逻辑 - 补全JSON结尾的闭合符号,确保格式合法
内容的提问来源于stack exchange,提问作者mas
相关产品推荐
相关产品推荐

