【问题标题】:How to trigger a DevOps release pipeline based on a build pipeline's path filter如何根据构建管道的路径过滤器触发 DevOps 发布管道
【发布时间】:2019-12-27 15:00:52
【问题描述】:

我有一个包含 3 个函数的 Azure Function App:

  • 功能应用
    • 函数A
    • 函数B
    • 函数C

我配置了一个 DevOps 管道,用于在 FunctionApp 的任何内容发生更改时构建函数应用。

我现在想设置一个发布管道,以调用任何更新的函数。例如,如果在我的拉取请求中只修改了 FunctionA,我只想调用 FunctionA。

如何使用 DevOps 管道做到这一点?

【问题讨论】:

  • Devops 管道触发构建与 repos 中的更改,它知道一个 git 分支何时发生更改,但它不知道特定(函数 A、B 或 C)文件何时更改。所以这似乎是不可能的。
  • 触发器也可以按路径过滤。

标签: azure-devops azure-pipelines


【解决方案1】:

我不想说“不可能”,但你要求的是几乎不可能的事情。

如果不构建应用程序代码的完整依赖关系图并将其绑定回更改的源文件,您将无法判断哪个函数发生了更改。这是一个例子:

假设函数 A 和函数 B 依赖于库 C。您更新库 C 中的代码。这意味着从函数的角度来看,函数 A 和函数 B 都发生了变化。您如何在构建时确定这一点?

当您开始不仅考虑构建,而且考虑部署时,它开始变得更加棘手——因为您实际上是在部署之后调用函数,而不是构建。这是一个场景:函数 A 和函数 B 都发生了变化,但出现了问题,部署仅部分成功,仅调用了函数 A。现在再次运行部署。既然 A 已经运行,它怎么知道只调用函数 B?

你没有说函数的实际用途是什么,但我怀疑这个问题的更好解决方案是确保你的函数是幂等的并且可以安全地多次运行。如果你这样做,问题的整个前提是没有实际意义的,你可以每次都部署和调用所有函数。

【讨论】:

  • 感谢您的回复,但我认为您可能在一个数量级上过度考虑了这一点。首先,假设功能是独立的;函数 A 的更改仅影响函数 A。共享库中的代码更新是我将手动处理的边缘情况。其次,函数是幂等的。但是,这些是长时间运行的函数,我宁愿不要不必要地运行它们。如果我更改函数 A,我只想触发函数 A,而不是消耗资源来运行函数 B 和 C。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-04-23
  • 2020-04-13
  • 2022-11-10
  • 1970-01-01
  • 2020-11-26
  • 2023-01-20
  • 1970-01-01
相关资源
最近更新 更多