【问题标题】:How to automatically deploy Function App contents using Resource Group project in Visual Studio 2017?如何使用 Visual Studio 2017 中的资源组项目自动部署 Function App 内容?
【发布时间】:2018-10-23 15:24:18
【问题描述】:

关于如何自动部署 Web 应用程序有很好的说明 - 创建所需的基础架构和部署 Web 应用程序内容。 比如这个描述的很好here

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

我的情况是什么:

  • 我在 Visual Studio 2017 资源组项目中使用 Azure RM 模板部署
  • 我已经成功定义了函数模板
  • 我已经成功为函数定义了 Web Deploy 模板
  • 我已将我的函数创建为一个单独的项目,它工作正常
  • 在资源组项目中,添加了对函数项目的引用,其属性定义如下:

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

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

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

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

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

非常感谢!

【问题讨论】:

    标签: azure azure-functions azure-resource-manager webdeploy azure-template


    【解决方案1】:

    我设法找到了一个实际上非常优雅且非常简单的解决方法。
    希望这对其他人有所帮助:
    1.在Function App项目上安装"MSBuildTasks" NuGet package
    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. 上面sn-p中的重要部分如下。它们有助于将目标绑定到资源组项目(请参阅问题中的图像):
      • Target 的名称应为“Package”,由资源组项目调用
      • 资源组项目传递的$(PackageLocation) 属性的使用

    This blog post helped me.

    【讨论】:

    • 非常感谢。正在为这个敲打我的头。
    【解决方案2】:

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

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

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

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

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

    Kloud blog just added a great write up of how to do this

    【讨论】:

    • 提到了一些有趣的事情,谢谢。当然,这提供了另一个视角,但是在这个阶段我无法以这种方式迁移我们公司的项目。我主要关心的是生成 ZIP 并将其传递给资源组项目。我正在寻找解决方法。准备好后,我将发布另一个答案。谢谢
    【解决方案3】:

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

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

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

      <PropertyGroup>
        <MSBuildCommunityTasksPath>$(SolutionDir)\.build</MSBuildCommunityTasksPath>
      </PropertyGroup>
    
      <Import Project="$(MSBuildCommunityTasksPath)\MSBuild.Community.Tasks.Targets" />
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-09-06
      • 2017-11-07
      • 2017-08-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多