Azure DevOps和Azure功能部署:我的应用程序设置在哪里

时间:2020-01-22 12:00:05

标签: c# azure azure-devops azure-deployment azure-function-app

我正尝试将Dotnet核心Azure功能上载到Windows上托管的应用程序服务,而我正努力证明其有效或确保设置正确。

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

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

  1. c#函数进行编译,所有单元测试均在本地以及在Azure DevOps构建代理上通过
  2. 构建完成并生成zip文件
  3. 我将zip文件包装在一个版本化的Nuget包中
  4. Nuget程序包托管在Azure DevOps Artifacts存储库中

因此,此时一切都很好。

发布过程

  1. 我在Azure DevOps构建代理上还原并解压缩nuget程序包。
  2. 我确认Powershell任务中存在zip文件-一切正常。
  3. 然后使用 Azure DevOps Release管道任务; “天蓝色函数”
  4. 我认为我已经正确配置了此任务
    • 包裹或文件夹:“我在上面的步骤2中验证的路径”
    • 部署方法:Zip Deploy(我已经在不同版本的Package部署和Package部署之间进行了替换)

应用设置(请参见下面的屏幕截图)

  • 名称值对,例如-Name“ value” -Name2“ value2”等
  • 我还在应用程序设置列表中添加了-WEBSITE_RUN_FROM_PACKAGE“ 1”(我尝试了存在和不存在此设置的发行版)

结果

该版本通过了,它在日志中表示已上传了软件包和应用程序设置。

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

  • 我没有看到我以为我已在发行版中上传的应用设置。
  • 它保留了我直接通过Azure门户添加的虚拟应用程序设置

问题

  • 在通过此任务启动发布之前,是否应该使用Azure门户在AppServive中创建一个空的Azure函数?
    • 我第一次运行发行版失败,因为它说找不到我指定的插槽。我的印象是 Azure Function流水线任务将创建所有内容,但看起来它希望有一个空功能,其中预定义了广告位,并且可能预定义了应用程序设置。有什么想法吗?
    • 发布之前,我是否必须在门户中创建应用程序设置?换句话说,管道任务仅允许更新到现有的Portal创建的应用程序设置。
  • 是否有更好的管道任务可供使用-如果尚不存在,它可以创建一个新的Azure函数?

与帮助文档通常一样,我所看到的信息遵循的是一条快乐的路,或者有时包含过多的if,buts甚至是建议。

任何指导都将是不胜感激的,因为我觉得我在这里转来转去,应该很简单。

谢谢。

enter image description here

2 个答案:

答案 0 :(得分:0)

您可以通过Azure-Resource-Manager Templates部署Azure功能。您可以在GitHub上找到示例。通过此步骤,您可以在部署之前在Azure上创建所需的基础结构。对于您的情况,Azure功能和消耗计划。因此,在您的部署中,将在第一步中提供基础结构,然后在实际功能中将程序包进行部署。

有关基础结构,请查看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'

答案 1 :(得分:0)

在Azure Devops管道中完成构建后,您将创建一个用于发布的程序包。您必须确保该软件包中的内容与正确的文件夹结构匹配。根据{{​​3}},您应用的内容应具有以下结构。

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浏览已部署的文件。如果您选择从程序包运行,则可以在/data/SitePackages/看到使用的程序包。 packagename.txt指向使用的最新软件包。包的内容提取到/site/wwwroot/中。在那里,您应该至少看到一个host.json,一个bin文件夹以及包含您的功能的文件夹。没有其他的。功能应用程序内容不应部署到/site/wwwroot/的子文件夹中,例如/site/wwwroot/FunctionApp/

如果wwwroot中的内容和文件夹结构不正确,您可能仍会看到成功的部署,则会显示Function App,但未显示任何功能。