英文:
Nested JSON appsetting substitution not working in microsoft/variable-substitution
问题
我正在尝试替换应用程序设置中的嵌套JSON对象。
期望如下:
替换之前:
{
"externalapp": ""
}
替换之后:
{
"externalapp": {
"url": "https://external.com",
"cleintid": "cid",
"secret": "client secret"
}
}
externalapp
JSON({..} 包括大括号)存储为GitHub环境中的机密,并在工作流运行期间引用。
但问题是替换后的JSON显示为字符串。
以下是实际输出:
"externalapp":
"{
\"url\":\"https://external.com\",
\"clientid\": \"cid\",
\"secret\":\"client secret\"
}"
有没有办法去掉这些额外的字符(\n
,\
,"
)?
请查找工作流程代码:
- name: 更新动态URL
uses: microsoft/variable-substitution@v1
with:
files: 'appsettings.json'
env:
externalapp: ${{ secrets.EXTERNAL_APP }}
提前感谢!
英文:
I am trying to replace a nested JSON object in the app setting.
Below is the expectation:
Before replacement:
{
"externalapp": ""
}
After replacement:
{
"externalapp": {
"url":"https://external.com",
"cleintid": "cid",
"secret":"client secret"
}
}
externalapp
JSON ({..} including braces) is stored as a secret in GitHub environments and referenced during the workflow run.
But the problem is that the replaced JSON is appearing as a string.
Below is the actual output:
"externalapp":
"{\n
\"url\":\"https://external.com", \n
\"clientid\": \"cid", \n
\"secret\":\"client secret" \n
\n}"
Any idea how to get rid of these additional characters (\n
, \
,"
)?
Please find the workflow code:
- name: Update Dynamics URL
uses: microsoft/variable-substitution@v1
with:
files: 'appsettings.json'
env:
externalapp: ${{ secrets.EXTERNAL_APP }}
Thanks in advance!
答案1
得分: 3
问题在于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: 替换密钥
shell: bash
run: |
cat appsettings.json | jq --argjson my_secret $MY_SECRET '.externalapp = $my_secret' > newfile.json
env:
# 在您的情况下,应该是:${{ secrets.EXTERNAL_APP }}
MY_SECRET: '{ "url":"https://external.com", "cleintid": "cid", "secret":"client secret" }'
英文:
The issue is that jobs.<job_id>.steps\[*\].env
loads your secret as a JSON string, which will replace your line breaks with \n
and escape all your JSON key/values quotes with \"
.
If you don't have another reason to use microsoft/variable-substitution
, just use jq
to update your object. For example:
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" }'
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论