1

有关如何自动化 Web 应用程序部署的非常好的说明 - 创建所需的基础架构和部署 Web 应用程序内容。例如,这是很好的描述here

但是,我找不到任何有关如何为函数应用程序完成此操作的详细说明。

我的情况是什么:

  • 我将 Azure RM 模板部署与 Visual Studio 2017 资源组项目一起使用
  • 我已经成功定义了函数模板
  • 我已经成功地为函数定义了 Web 部署模板
  • 我已经将我的函数创建为一个单独的项目并且它工作正常
  • 在 Resource Group 项目中,添加了对 Function 项目的引用,其属性定义如下: 在此处输入图像描述

当我部署资源组时,它失败并显示消息“项目中不存在目标“包”。”

这意味着它无法构建 ZIP 包。

如果我从“包含目标”中删除“包”参数,然后手动将“package.zip”提供给资源组项目,一切正常。

Resource Group 项目应该如何配置才能为 Function App 项目自建 ZIP 包?

是否可以在函数应用项目中添加“包”目标?

非常感谢!

4

3 回答 3

2

我设法找到了一个实际上非常优雅且非常简单的解决方法。
希望这对其他人有所帮助:
    1. 在 Function App 项目上安装“ MSBuildTasks”NuGet 包
    2. 打开以编辑 Function App 项目的 .csproj 文件并在元素中的某处添加以下<Project>内容:

<Project>
  ...
  <Import Project="$(ProjectDir)obj\FunctionApp.csproj.nuget.g.targets" />
  <ItemGroup>
    <ProjectFiles Include="$(OutDir)\**\*.*" />
  </ItemGroup>
  <Target Name="Package">
    <Zip Files="@(ProjectFiles)" WorkingDirectory="$(OutDir)" ZipFileName="$(PackageLocation)" />
  </Target>

</Project>
  1. 上面代码段中的重要部分如下。它们帮助将目标绑定到资源组项目(请参见问题中的图像):
    • 名称Target应为“包”,由资源组项目调用
    • $(PackageLocation)资源组项目传递的属性的使用情况

这篇博文帮助了我。

于 2018-10-24T07:54:06.600 回答
1

如果您预先采用 Azure Devops 并使用 CI/CD 管道自动执行此过程,您将处于一个更好的位置。

我过去通过将部署分为三个步骤完成了其中的一些(我的项目往往有一个调用该函数的逻辑应用程序):

  1. 拥有一个 ARM 模板,其中包含除逻辑应用之外的所有资源组内容。首先使用资源组部署任务进行部署
  2. 使用应用服务部署任务发布构建过程中生成的 zip 文件。这将创建在部署逻辑应用之前需要存在的函数应用终结点
  3. 使用另一个资源组部署步骤从单独的 ARM 模板部署逻辑应用

我知道逻辑应用程序超出了您在问题中定义的范围,因此在您的情况下,您只需省略第三步。

即使只是一个简单的函数应用程序部署,我仍然认为拥有 CI/CD 管道将从长远来看会让您的生活更轻松。

Kloud 博客刚刚添加了一篇关于如何做到这一点的精彩文章

于 2018-10-23T23:41:18.050 回答
1

建立在弗拉迪斯拉夫非常有帮助的完整答案的基础上......

MSBuildTasks nuget 部署中的一个错误阻止它按照项目站点中记录的 .Net Core 项目进行安装。.build 文件夹永远不会被创建。

如果您将 MSBuildTasks 版本 1.4.0.128 添加到解决方案中的 .Net Framework 项目,您可以使用网站上描述的 Import:

  <PropertyGroup>
    <MSBuildCommunityTasksPath>$(SolutionDir)\.build</MSBuildCommunityTasksPath>
  </PropertyGroup>

  <Import Project="$(MSBuildCommunityTasksPath)\MSBuild.Community.Tasks.Targets" />
于 2020-05-28T20:35:52.183 回答