Github Action:如何使用仓库密钥编辑JSON对象
解决GitHub Action中替换JSON空值未生效的问题
问题原因
你的工作流存在两个关键问题:
jq命令中'test.json'前缺少空格,导致jq无法正确识别输入文件,命令实际未处理目标JSON。- 直接在jq表达式中嵌入
${{ secrets.PRIVATE_KEY }}会触发shell转义冲突,且若密钥含特殊字符(如引号、反斜杠)会直接导致jq语法错误,无法完成赋值。
修正后的工作流
使用jq的--arg参数安全传递密钥值,同时通过临时文件避免直接写入原文件可能引发的IO问题:
steps: - name: Edit Json shell: bash run: | # 用--arg传递密钥,避免转义问题 jq --arg secret "${{ secrets.PRIVATE_KEY }}" '.secret = $secret' test.json > temp.json # 替换原文件 mv temp.json test.json - name: Display updated file run: cat test.json
额外说明
如果你的PRIVATE_KEY是多行内容(如SSH密钥),需要先对其进行JSON字符串转义,避免破坏JSON格式:
steps: - name: Edit Json shell: bash run: | # 对多行密钥进行JSON转义后传递 escaped_secret=$(echo "${{ secrets.PRIVATE_KEY }}" | jq -sR .) jq --argjson secret "$escaped_secret" '.secret = $secret' test.json > temp.json mv temp.json test.json
内容的提问来源于stack exchange,提问作者Coder3000
相关产品推荐
相关产品推荐

