【问题标题】:Azure-Devops Pipeline - wait for E2E tests pipeline to pass before deploy to next environmentAzure-Devops Pipeline - 等待 E2E 测试管道通过,然后再部署到下一个环境
【发布时间】:2021-03-06 10:38:19
【问题描述】:

我们有通常具有以下阶段的管道:

  • 构建(+ 单元测试)
  • 部署到开发人员
  • 部署到测试
  • 部署到生产中

此外 - 在测试和生产环境中 - 已定义批准 - 因此,如果 PR 被合并,则仅将其部署到开发,然后需要手动批准才能部署到测试等。

我们有许多组件(API A、API B、一些后台工作人员等),因为我们想独立管理和部署这些组件 - 它们都定义了自己的管道(它们看起来都非常相似 -如上所述)。

有时会发生一个 PR 影响多个组件,然后并行触发 2 个或 3 个或更多管道。

我们还有一组 E2E 测试 - 用于验证所有组件是否可以一起正常工作。

当单个 PR 被合并并影响多个组件时 - 我们真的不想多次触发这些 E2E 测试。我们只想在所有受影响组件的所有管道部署到特定环境时触发它。 因此,我们为这些 E2E 测试分离了 Pipeline。

我们想要实现的流程是:

  • PR 已合并
  • 组件 A、B 和 C 的管道被触发。
  • 组件 A、B 和 C 的管道已完成阶段:“部署到 DEV”,下一个阶段:“部署到 TEST”处于“等待”状态
  • E2E 测试管道已启动
  • 组件 A、B 和 C 的管道将运行阶段“部署到测试”,前提是有人手动批准(我们现在有这个)E2E 测试管道已成功完成

你知道我们怎样才能达到最后一个条件吗?

【问题讨论】:

  • 将所有这些管道组合成一个带有适当的dependsOn块的多阶段/多作业管道。

标签: azure-devops azure-devops-pipelines


【解决方案1】:

您需要将自定义 Powershell/Shell 任务写入您的管道,该任务实质上是轮询更新以检查您的外部 E2E 测试管道是否已完成,并在 E2E 测试完成时完成该过程。

这是另一个答案的链接,其中包含如何完成此操作的示例:

但是,使用这种方法,如果您的 E2E 测试需要几个小时才能运行,您可能会遇到作业超时的问题。默认超时为:

  • 360 分钟自托管作业
  • 60 分钟用于 Microsoft 托管的作业

这里是关于超时的文档:

【讨论】:

    猜你喜欢
    • 2022-01-16
    • 2020-11-23
    • 2021-07-23
    • 2021-02-27
    • 1970-01-01
    • 2020-12-15
    • 1970-01-01
    • 2019-07-15
    • 1970-01-01
    相关资源
    最近更新 更多