在Azure DevOps上,我有一个构建/部署YAML管道,它构建我的函数应用程序并将其部署到Azure中的Linux函数应用程序(托管在应用程序-服务计划上)。
然而,最近我注意到一个问题,管道显示功能应用程序已成功部署,但当进入Azure中的FunctionApp并单击左侧的Functions选项卡时,它显示"没有结果",但应该有4个函数在那里。
我想在部署管道的末尾有一个步骤,检查这个FunctionApp中是否存在4个函数,如果不是这种情况,管道运行失败。
我知道这很可能是使用Azure CLI或Powershell的管道中的任务,但不确定我将如何编写脚本。如有任何帮助,我将不胜感激。
谢谢,
你可以使用Azure CLI任务并调用Rest API来列出FunctionApp中的函数。我不认为本地Az CLI和Azure PowerShell函数暴露了FunctionApp/
中的函数。URI = "https://management.azure.com/subscriptions/<subscriptionId>/resourceGroups/<resourceGroupName>/providers/Microsoft.Web/sites/<functionAppName>/functions?api-version=2015-08-01"
az rest -u $URI --method get | jq '.value[].name'
steps:
- powershell: |
#get token
$TENANTID="xxx"
$APPID="xxx"
$PASSWORD="xxx"
$result=Invoke-RestMethod -Uri https://login.microsoftonline.com/$TENANTID/oauth2/token?api-version=1.0 -Method Post -Body @{"grant_type" = "client_credentials"; "resource" = "https://management.core.windows.net/"; "client_id" = "$APPID"; "client_secret" = "$PASSWORD" }
$token=$result.access_token
##set Header
$Headers=@{
'authorization'="Bearer $token"
'host'="management.azure.com"
}
$functions = Invoke-RestMethod -Uri "https://management.azure.com/subscriptions/<subcription id>/resourceGroups/<resource group name>/providers/Microsoft.Web/sites/<function app name>/functions?api-version=2015-08-01" -Headers $Headers -ContentType "application/json" -Method GET
if($functions.value.Count -eq 4) {
# make pipeline to succeed
Write-Host 'Function deployment success.'
exit 0
}
else {
Write-Host 'Function deployment failed.'
exit 1
}
displayName: 'Check whether the function app deployment completed.'
如果你有什么问题,请告诉我。