Github Actions variable-mapper JSON解析报错,请求协助排查
解决Github Actions中kanga333/variable-mapper的JSON解析错误
问题根源
你的SSH密钥(存储在secrets中)包含换行符,当通过${{ secrets.SSH_PRIVATE_KEY }}直接插入到JSON字符串时,换行符会被原样输出,破坏JSON语法结构——JSON字符串不允许存在未转义的换行字符,这就是报错Unexpected token in JSON at position 108的原因。
解决方案
使用Github Actions内置的toJSON函数处理secrets,自动转义所有特殊字符(包括换行),确保生成合法的JSON格式。
修改后的Map environment variables步骤配置如下:
- name: Map environment variables uses: kanga333/variable-mapper@master with: key: "${{ inputs.environment }}" map: | { "prod": { "environment": "production", "AWS_SECRET_ACCESS_KEY": ${{ toJSON(secrets.SSH_PRIVATE_KEY) }} }, "staging": { "environment": "staging", "AWS_SECRET_ACCESS_KEY": ${{ toJSON(secrets.SSH_PRIVATE_KEY_STAGING) }} }, ".*": { "environment": "test", "AWS_SECRET_ACCESS_KEY": ${{ toJSON(secrets.SSH_PRIVATE_KEY_TEST) }} } }
关键修改说明
- 去掉了
"包裹${{ toJSON(...) }}:toJSON函数会自动为字符串添加合法的双引号,并将内部的换行、引号等特殊字符转义为JSON兼容格式(比如把换行转为\n),避免手动加引号导致的格式冲突。 - 保留原有的JSON结构和匹配规则,仅针对secrets的插入方式做调整。
额外验证
执行工作流前,可以先通过本地JSON校验工具(如https://jsonlint.com/)模拟生成的JSON内容,确认格式合法。比如toJSON处理后的密钥会变成:
"AWS_SECRET_ACCESS_KEY": "-----BEGIN RSA PRIVATE KEY-----\nMIIEpAIBAAKCAQEAz...\n...\n-----END RSA PRIVATE KEY-----"
这种格式完全符合JSON语法要求。
内容的提问来源于stack exchange,提问作者Josselin Avril
相关产品推荐
相关产品推荐

