无法使用 | AzureFunctionApp appSettings 中的字符:

Unable to use | character in AzureFunctionApp appSettings:

我正在我的 AzureFunctionApp@1 部署任务中设置大量的 appSettings - 但每当我尝试使用 | 字符将每个放在新的一行时,我都会收到错误消息:

##[error]Error: Failed to update App service '{{functionName}}' application settings. Error: BadRequest - Parameter name cannot be empty. (CODE: 400)

上面的输出似乎表明它确实用空参数名称构建了 JSON。但我不知道为什么?我已经用不同行的值进行了测试,但仍然在一行中,所以这些都不起作用:

appSettings: |
  '-Values:Setting1 "$(SettingVal1)"
  -Values:Setting2 "$(SettingVal2)"'
appSettings: |
  '-Value:Setting1 "$(SettingVal1)" -Values:Setting2 "$(SettingVal2)"'

但是这样做:

appSettings: '-Value:Setting1 "$(SettingVal1)" -Values:Setting2 "$(SettingVal2)"'

我也尝试过不使用 ' - 但那也没什么区别。

根据您的反馈 - 将我的评论转换为答案,也在我的系统中本地尝试。

多行 json 输入适用于在应用程序设置中设置多个值,因为这是最接近的方式。

appSettings: |
     [
       {
         "name": "APPINSIGHTS_INSTRUMENTATIONKEY",
         "value": "$(Key)",
         "slotSetting": false
       },
       {
         "name": "MYSQL_DATABASE_NAME",
         "value": "$(DB_Name)", 
         "slotSetting": false
       }
     ]

多行 JSON 不适用于 AzureFunctionApp@1 任务的 appSettings 参数(出于某种原因)。

如果您尝试将多行 JSON appSettingsAzureFunctionApp@1 任务一起使用,您将收到错误消息:BadRequest - Parameter name cannot be empty. (CODE: 400)

要使用多行 JSON appSettings,您需要使用单独的 AzureAppServiceSettings@1 任务 - 如文档中所述:https://docs.microsoft.com/en-us/azure/devops/pipelines/tasks/deploy/azure-app-service-settings?view=azure-devops

我可以确认这在 AzureFunctionApp@1 任务后有效。所以我的管道现在有:

steps:
...
- task: AzureFunctionApp@1
  displayName: Deploy the Function App
  condition: succeeded()
  inputs:
    azureSubscription: "${{parameters.AppAzureSubscription}}"
    appName: "${{parameters.functionAppName}}"
    package: "$(Pipeline.Workspace)/drop/$(Build.BuildId).zip"

- task: AzureAppServiceSettings@1
  displayName: Update app settings
  inputs:
    azureSubscription: "${{parameters.AppAzureSubscription}}"
    appName: "${{parameters.functionAppName}}"
    appSettings: |
      [
        {
          "name": "Values:DbConnectionString",
          "value": "$(DbConnectionString)",
          "slotSetting": false
        },
...
      ]