我希望我的 Azure DevOps 管道部署所有功能应用程序配置,而不需要在 DevOps 管道中手动输入它们,该怎么做?
我们有 C# 代码,正在部署在 Azure 函数应用程序上。但我们正在 azure devops 管道中手动添加 fucntion 应用程序的配置。
到目前为止,我们正在管道中的 Azure 函数部署任务中输入配置,但我想要它,因为它需要直接来自源代码,而不需要在管道中输入它们。
我们需要指导来了解如何使用 ADO 管道自动化配置值。这可能吗?
您可以添加任务来运行 Azure CLI 脚本来批量编辑应用程序设置:
az webapp config appsettings set \
--resource-group <group-name> \
--name <app-name> \
--settings "@settings.json"
settings.json
所需的文件格式是一个JSON设置数组,其中插槽设置字段是可选的
[
{
"name": "key1",
"slotSetting": false,
"value": "value1"
},
{
"name": "key2",
"value": "value2"
}
]
为了方便起见,您可以使用
az webapp config appsettings list
将现有设置保存到 JSON 文件中。以下示例可以在 Bash 中运行:
# Save the settings
az webapp config appsettings list --name <app-name> --resource-group <group-name> > settings.json
# Edit the JSON file
...
# Update the app with the JSON file
az webapp config appsettings set --resource-group <group-name> --name <app-name> --settings @settings.json
appsettings.json 文件不能直接在 Azure CLI 中使用:
az webapp config appsettings set
。
是否有其他方法可以直接提取 appsettings.json 文件中的所有配置并直接在功能应用程序上部署所有这些配置?
为了满足您的要求,您可以使用脚本循环appsettings.json文件中的应用程序设置值。然后,您可以将它们添加到数组并将其用于 Azure CLI commnad。
这是一个例子:
steps:
- task: AzureCLI@2
inputs:
azureSubscription: 'xxx'
scriptType: 'ps'
scriptLocation: 'inlineScript'
inlineScript: |
$json = Get-Content '$(build.sourcesdirectory)/AzureFunctionAppSettings/Startup/appsettings.json' | Out-String | ConvertFrom-Json
$appsettingnames = $json.values | Get-Member | Where {$_.MemberType -like 'NoteProperty'} | Select-Object -Property name
$appsettingslist = @()
ForEach ($appsettingname in $appsettingnames.name)
{
$appsettingvalue = $json.values.$appsettingname
$singleappsetting = "`"$appsettingname=$appsettingvalue`""
$appsettingslist = $appsettingslist + $singleappsetting
}
echo $appsettingslist
az webapp config appsettings set --resource-group resourcegroupname --name functionappname --settings $appsettingslist
结果样本: