嵌套的 JSON appsetting 替换在微软/变量替换中不起作用

问题描述 投票:0回答:1

我正在尝试替换应用程序设置中的嵌套 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 }}

提前致谢!

c# .net github github-actions appsettings
1个回答
0
投票

问题是

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" }'
© www.soinside.com 2019 - 2024. All rights reserved.