Azure DevOps 和 Azure Function Deployment:我的应用程序设置在哪里

Azure DevOps and Azure Function Deployment: where are my app settings

我正在尝试将 Dotnet 核心 Azure 函数上传到 Windows 上托管的应用服务,我正在努力证明它有效或确保设置正确。

我也希望部署应该完全自动化,而无需通过 Azure 门户和调整设置等。

构建过程:目前看起来是这样的...

  1. C# 函数编译并且所有单元测试在本地和 Azure DevOps 构建代理上通过
  2. 构建完成并生成 zip 文件
  3. 我将 zip 文件包装在版本控制的 Nuget 包中
  4. Nuget 包托管在 Azure DevOps Artifacts 存储库中

现在看来一切都很好。

发布过程

  1. 我在 Azure DevOps 构建代理上还原并解压了 nuget 包。
  2. 我确认 zip 文件与 Powershell 任务一起存在 - 一切正常。
  3. 然后我使用 Azure DevOps 发布管道任务; "Azure Functions"
  4. 我想我已经正确配置了这个任务
    • 包或文件夹:"The path I validated in step 2 above"
    • 部署方式:Zip Deploy(我在不同的版本中交替使用过这种部署方式和Package部署方式)

应用设置(见下方截图)

结果

发布通过,它在日志中说它上传了包和应用程序设置。

但是,当我转到 Azure 门户时:

问题

就像帮助文档中经常出现的情况一样,我看到的信息遵循一条快乐的道路,或者有时太多了,有很多如果、但是,也许还有建议。

任何指导都将不胜感激,因为我觉得我在这里兜圈子,应该很简单。

谢谢。

您可以通过 Azure-Resource-Manager Templates. You can find samples on GitHub 部署 Azure Functions。通过此步骤,您可以在部署之前在 Azure 上创建所需的基础结构。在您的例子中,Azure Functions 和消费计划。因此,在您的部署中,基础结构在第一步中提供,然后将包实际部署到您的函数中。

对于基础架构,请查看 Create or Update Resource Groups 的 Azure DevOps 步骤。

两个步骤的 YAML 示例:

- task: AzureResourceGroupDeployment@2
  displayName: 'Create Or Update Resource Group'
  inputs:
    deploymentMode: 'Incremental'
    azureSubscription: 'Your-Subscription'
    resourceGroupName: '${{ parameters.resourceGroupName }}'
    location: '${{ parameters.location }}'
    csmFile: '${{ parameters.csmFile }}'
    csmParametersFile: '${{ parameters.csmParametersFile }}'

- task: AzureRmWebAppDeployment@4
  displayName: 'Azure App Service Deploy'
  inputs:
    azureSubscription: 'Your-Subscription'
    appType: functionApp
    WebAppName: '${{ parameters.function }}'
    packageForLinux: '$(Agent.BuildDirectory)/${{ parameters.dropfolder }}/$(Build.Repository.Name)-$(version)-$(Build.SourceBranchName)-$(Build.BuildNumber).zip'

在 Azure Devops 管道中完成构建后,您将创建一个包以从中发布。您必须确保该包中的内容与正确的文件夹结构相匹配。根据 Requirements for continuous deployment.

,您应用的内容应具有以下结构
FunctionApp
 | - host.json
 | - MyFirstFunction
 | | - function.json
 | | - ...  
 | - MySecondFunction
 | | - function.json
 | | - ...  
 | - SharedCode
 | - bin

构建完成后,您可以通过转到特定构建的摘要并单击已发布的工件来检查生成的包的内容。您可以在那里下载内容并确保它具有以下结构和内容:

 | - host.json
 | - MyFirstFunction
 | | - function.json
 | | - ...  
 | - MySecondFunction
 | | - function.json
 | | - ...  
 | - SharedCode (might not be there)
 | - bin

部署后,您可以使用 CMD 或 Powershell 调试控制台通过 Kudu 浏览已部署的文件。如果您选择 运行 from package,您可以看到在 /data/SitePackages/ 处使用的包。 packagename.txt 指向最新使用的包。包的内容被提取到 /site/wwwroot/。在那里您应该至少看到一个 host.json、一个 bin 文件夹,以及包含您的函数的文件夹。没有其他的。函数应用内容不应部署到 /site/wwwroot/ 的子文件夹,例如 /site/wwwroot/FunctionApp/.

如果 wwwroot 中的内容和文件夹结构不正确,您可能仍然会看到部署成功,出现了功能应用程序,但没有显示任何功能。