我正在尝试替换应用程序设置中的嵌套 JSON 对象。
以下是预期:
更换前:
{
"externalapp": ""
}
更换后:
{
"externalapp": {
"url":"https://external.com",
"cleintid": "cid",
"secret":"client secret"
}
}
externalapp
JSON({..} 包括大括号)作为秘密存储在 GitHub 环境中,并在工作流运行期间被引用。
但问题是被替换的 JSON 显示为字符串。
下面是实际输出:
"externalapp":
"{\n
\"url\":\"https://external.com", \n
\"clientid\": \"cid", \n
\"secret\":\"client secret" \n
\n}"
任何想法如何摆脱这些额外的字符(
\n
,\
,"
)?
请查找工作流程代码:
- name: Update Dynamics URL
uses: microsoft/variable-substitution@v1
with:
files: 'appsettings.json'
env:
externalapp: ${{ secrets.EXTERNAL_APP }}
提前致谢!
jobs.<job_id>.steps\[*\].env
将您的秘密加载为 JSON 字符串,这将用 \n
替换换行符并用 \"
转义所有 JSON 键/值引号。
microsoft/variable-substitution
,只需使用jq
来更新您的对象。例如:
jobs:
foo:
runs-on: ubuntu-latest
steps:
- shell: bash
run: |
echo '{ "externalapp": "" }' > appsettings.json
- name: Replace secret
shell: bash
run: |
cat appsettings.json | jq --argjson my_secret $MY_SECRET '.externalapp = $my_secret' > newfile.json
env:
# In your case it would be: ${{ secrets.EXTERNAL_APP }}
MY_SECRET: '{ "url":"https://external.com", "cleintid": "cid", "secret":"client secret" }'