azure-devops - Azure Devops - 创建在所有其他触发管道之后运行的集成测试管道
问题描述
我有一个单独的存储库,它被分割成多个项目,每个项目都有一个生成 Docker 映像的构建。我已将 Azure devops 配置为在每个项目的正确路径上触发,以便在它们的子目录更改时获得正确的图像构建。一个 PR 可以触发一个或多个图像的构建。
构建完所有映像后,我想触发一个集成测试作业,该作业启动构成我的服务的所有映像。如果 PR 没有改变一个,它应该运行 service:latest 而不是构建的那个。如何创建一个在其他每个管道完成并知道要使用哪个映像版本之前不会启动的测试管道?对于图像,我想我可以在图像标签中使用 PR 编号或提交哈希值,如果该图像不存在,则恢复为 service:latest。
尚不清楚的是如何让集成测试作业等待所有相关(理想情况下并行化)构建完成。我考虑了具有不同构建作业的单个管道的想法,但这会产生另一个问题,即希望为每个构建工件输出独立触发 CD。我从不想重新部署未更改的映像,并且我希望能够跟踪已更改的映像的部署,因此用于所有构建的单个 CD 是一个坏主意。
解决方案
您可以创建一个发布管道来运行您的测试作业并配置invoke rest api
Gate 以检查所有管道是否已完成。请参见以下步骤:
1、创建发布管道。
2,添加来自其他管道的所有工件作为发布管道工件源。以便在发布任何新版本的工件时触发管道。
3,创建通用服务连接以连接到您的 azure devops 组织。有关详细步骤,请参阅此线程。
4、为发布管道配置invoke rest api Gate。请参见下面的屏幕截图。
5、配置invoke rest api gate调用Build-latest rest api获取其他依赖管道的最新构建。请参见下面的屏幕:
6、为您的每个依赖管道添加多个调用 rest api 门
7、配置Gate的评估选项。
完成上述配置后,如果所有流水线都被评估为完成并成功,则将执行发布流水线。
要决定使用哪个映像版本,您可以在发布管道中克隆源代码并在 git 命令下运行以检查更改了哪些文件夹。然后您可以决定使用哪些图像。请参阅此线程以获取更多信息。
git diff HEAD HEAD~ --name-only
推荐阅读
- python - 我有一个字符串,想一次性替换字符串中的所有值
- javascript - Chrome 扩展响应 TypeError:无法读取未定义的属性“文本”
- java - 如何检查线串是否与Java中的多边形相交
- java - 从 Rxjava2 中的 Single.onErrorResumeNext 启动可观察链
- java - GetStream API 错误:QueryUsers 因错误“缺少请求有效负载”而失败
- html - 如果浮动元素在 HTML 结构中定义在块元素之后,为什么它们不会与块元素重叠?
- python - 在这种情况下,Pytorch 如何处理反向传播?
- opencv - 使用 open cv imread 避免图像旋转
- javascript - 获取数组中某个元素的值
- rest - SOAP 是唯一与服务相关的 OPC UA 实现吗?它与 Rest 相比如何?