多Pipeline依赖配置疑问:A、B均完成后触发C的逻辑确认
多Pipeline触发逻辑判断
我拥有两个独立的Pipeline A和B,需求是仅当A与B均成功完成后才触发Pipeline C;A、B运行时间不同,若其中任一失败则不触发C。现询问如下示例配置采用的是「或」逻辑还是「与」逻辑?此前我仅配置过单Pipeline依赖。
配置示例
resources: pipelines: - pipeline: A source: A.source trigger: branches: - master - pipeline: B source: B.Source trigger: branches: - master
回答
你给出的示例配置采用的是**「或」逻辑**:
- 只要Pipeline A或Pipeline B任意一个在master分支成功完成,就会触发Pipeline C
- 哪怕其中一个失败,另一个成功时,C依然会被触发,这不符合你要的「两者都成功才触发」的需求
如果要实现你需要的**「与」逻辑**(仅A、B都成功才触发C),可以按以下方式调整:
- 先将resources中的
trigger改为none,避免单个Pipeline完成就触发C - 在Pipeline C中添加前置检查任务,验证A和B的最新运行状态:
- 可以编写脚本调用对应CI平台的API查询A、B的运行状态
- 仅当两者状态均为成功时,才继续执行C的后续任务;否则直接终止Pipeline
也可以通过YAML的条件判断来实现:
resources: pipelines: - pipeline: A source: A.source trigger: none - pipeline: B source: B.Source trigger: none jobs: - job: Check_Dependency_Status steps: - script: echo "Verifying if both Pipeline A and B succeeded" displayName: 'Check A & B status' condition: | and( eq(resources.pipeline.A.status, 'Succeeded'), eq(resources.pipeline.B.status, 'Succeeded') ) - job: Execute_C dependsOn: Check_Dependency_Status condition: succeeded() steps: # 此处添加Pipeline C的实际任务
内容的提问来源于stack exchange,提问作者ypark
相关产品推荐
相关产品推荐

