我有一个单独的存储库,它分为多个项目,每个项目都有一个生成 Docker 映像的构建。我已将 Azure DevOps 配置为在每个项目的正确路径上触发,以便在子目录更改时构建正确的图像。一个 PR 可以触发构建一个或多个图像。
构建完我的所有图像后,我想触发一个集成测试作业,以启动构成我的服务的所有图像。如果 PR 没有改变,它应该运行 service:latest 而不是构建的那些。如何创建一个测试管道,直到其他每个管道完成并知道要使用哪个映像版本后才开始?对于图像,我想我可以在图像标签中使用 PR 编号或提交哈希之类的内容,如果该图像不存在,则恢复为 service:latest。
不清楚的是如何让集成测试作业等待所有依赖(理想情况下是并行化的)构建完成。我考虑了具有不同构建作业的单个管道的想法,但这会产生另一个问题,即希望为每个构建工件输出独立触发 CD。我从不想重新部署未更改的映像,我希望能够跟踪已更改的映像的部署,因此所有构建都使用一张 CD 是个坏主意。
答案 0 :(得分:0)
您可以创建一个发布管道来运行您的测试作业并配置 invoke rest api
Gate 以检查所有管道是否已完成。请参阅以下步骤:
1、创建一个 release pipeline。
2、添加来自其他管道的所有工件作为发布管道工件源。以便在发布任何新版本的工件时触发管道。
3、创建通用服务连接以连接到您的 azure devops 组织。有关详细步骤,请参阅此主题。
4、为发布管道配置invoke rest api Gate。请参阅下面的屏幕截图。
5、配置invoke rest api gate调用Build-latest rest api获取其他依赖管道的最新build。请参阅以下屏幕:
6、为每个依赖管道添加多个 invoke rest api gate 一个
7、配置 Gate 的评估选项。
经过以上配置,如果所有管道都评估为完成并成功,就会执行发布管道。
要决定使用哪个映像版本,您可以在发布管道中克隆源代码并在 git 命令下运行以检查哪些文件夹已更改。然后您可以决定使用哪些图像。请see this thread了解更多信息。
git diff HEAD HEAD~ --name-only