azure-devops - 当我推送整个解决方案的存储库时,是否可以仅部署更新的 Azure Function 项目?

标签 azure-devops azure-functions azure-pipelines

我需要重构 .Net Web API,我正在考虑转向无服务器,并且我正在尝试了解将代码迁移到 Azure Functions 的最佳选择。

据我所知,降低成本和冷启动时间的正确方法是拆分 API:拥有许多小型 Web API 比拥有所有方法的单个 Web API 要好得多。小 API 消耗内存更少,冷启动更快。

在同一个项目中拥有更多函数并不能解决问题,因为它们将全部部署在同一个函数应用程序中,因此只有一个 dll、内存高、冷启动慢。 因此,我应该创建多个 Azure Function 项目,并将每个项目部署在不同的 Function App 中。

如果以上所有内容都正确,我们终于解决了问题: 我将构建代码和存储库,以便我拥有一个包含多个 Azure Function 项目的解决方案。如何拥有 CI/CD (Azure DevOps),以便在推送存储库时仅部署更新/修改/新的 Azure 函数项目?我只需要部署修改后的 Azure Function 项目,以免所有 Function Apps(以及代码未更改的应用程序)变冷。

这不太重要,但我还需要为所有 API 提供一个 URL,因此 https://myapi.azurewebsites.net/api/Function1 , https://myapi.azurewebsites.net/api/Function2等而不是https://myapi1.azurewebsites.net/api/Function1 , https://myapi2.azurewebsites.net/api/Function1等等。使用上面的结构可以吗?

最佳答案

您需要有多个 CI/CD 管道,且触发器仅限于特定文件夹:

trigger:
  paths:
    include:
    - function-a/*
    exclude:
    - '*'

为此,仅当在 function-a 文件夹中完成更改时,才会触发管道。为了限制开发管道所需的工作,您应该考虑使用模板。您可以在这里找到更多相关信息:

这样你就可以避免重复自己。

编辑

要统一您的 API,您可以使用 Azure Functions Proxies

With this feature, you can specify endpoints on your function app that are implemented by another resource. You can use these proxies to break a large API into multiple function apps (as in a microservice architecture), while still presenting a single API surface for clients.

关于azure-devops - 当我推送整个解决方案的存储库时,是否可以仅部署更新的 Azure Function 项目?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61475946/

相关文章:

azure - 通过 REST API 将 secret 变量传递到 Azure DevOps 发布管道时出错

kubernetes - Kubernetes 升级到 v1.22 后 DevOps CI/CD 管道中断

azure-devops - Azure DevOps 服务器上 NuGet 推送的“允许跳过重复项”警告和 409 错误

Azure 函数日志记录似乎不起作用

Azure Pipeline 使用 YAML 触发 Pipeline

azure - 如何在包含许多 Dockerfile 的单一存储库中构建一个特定的 Docker 镜像

由于 function.json 错误,Azure Function 部署失败

c# - Azure 服务总线和 Azure 函数队列触发器

Azure DevOps - Set-Azcontext - 无法识别术语 'Set-Azcontext'

go - 在 Azure Devops 中安装并运行 go package 任务