Azure Devops - 创建在所有其他触发管道之后运行的集成测试管道

时间:2021-02-05 03:06:10

标签: azure-devops

我有一个单独的存储库,它分为多个项目,每个项目都有一个生成 Docker 映像的构建。我已将 Azure DevOps 配置为在每个项目的正确路径上触发,以便在子目录更改时构建正确的图像。一个 PR 可以触发构建一个或多个图像。

构建完我的所有图像后,我想触发一个集成测试作业,以启动构成我的服务的所有图像。如果 PR 没有改变,它应该运行 service:latest 而不是构建的那些。如何创建一个测试管道,直到其他每个管道完成并知道要使用哪个映像版本后才开始?对于图像,我想我可以在图像标签中使用 PR 编号或提交哈希之类的内容,如果该图像不存在,则恢复为 service:latest。

不清楚的是如何让集成测试作业等待所有依赖(理想情况下是并行化的)构建完成。我考虑了具有不同构建作业的单个管道的想法,但这会产生另一个问题,即希望为每个构建工件输出独立触发 CD。我从不想重新部署未更改的映像,我希望能够跟踪已更改的映像的部署,因此所有构建都使用一张 CD 是个坏主意。

1 个答案:

答案 0 :(得分:0)

您可以创建一个发布管道来运行您的测试作业并配置 invoke rest api Gate 以检查所有管道是否已完成。请参阅以下步骤:

1、创建一个 release pipeline

2、添加来自其他管道的所有工件作为发布管道工件源。以便在发布任何新版本的工件时触发管道。

3、创建通用服务连接以连接到您的 azure devops 组织。有关详细步骤,请参阅此主题。

4、为发布管道配置invoke rest api Gate。请参阅下面的屏幕截图。

enter image description here

5、配置invoke rest api gate调用Build-latest rest api获取其他依赖管道的最新build。请参阅以下屏幕:

enter image description here

6、为每个依赖管道添加多个 invoke rest api gate 一个

7、配置 Gate 的评估选项。

enter image description here

经过以上配置,如果所有管道都评估为完成并成功,就会执行发布管道。

要决定使用哪个映像版本,您可以在发布管道中克隆源代码并在 git 命令下运行以检查哪些文件夹已更改。然后您可以决定使用哪些图像。请see this thread了解更多信息。

git diff HEAD HEAD~ --name-only