无法使用 | 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 appSettings
与 AzureFunctionApp@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
},
...
]
我正在我的 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 appSettings
与 AzureFunctionApp@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
},
...
]