如何通过Azure DevOps Builds Queue REST API实现父子流水线视觉关联?
问题描述
父流水线成功运行后,需通过Builds Queue REST API触发子流水线(因要传递模板参数),但遇到问题:通过常规YAML资源触发器触发时,子流水线中会显示触发它的父流水线可点击链接;而API触发的子流水线无法显示该关联,导致难以追踪触发关系。当前使用的curl调用代码如下:
# Trigger deployment pipeline RESPONSE=$(curl -X POST \ -H "Content-Type: application/json" \ -u :$(System.AccessToken) \ --data "{ 'definition': { 'id': $PIPELINE_ID }, 'templateParameters': '{\"deployReason\": \"automated\"}', 'reason': 'buildCompletion', 'project': {'id': $SYSTEM_PROJECTID} 'triggeredByBuild': '{ \"definitionId\": $SYSTEM_DEFINITIONID, \"id\": $BUILD_BUILDID, \"buildNumber\": $BUILD_BUILDNUMBER'} }" \ "$SYSTEM_COLLECTIONURI/$SYSTEM_TEAMPROJECT/_apis/build/builds?api-version=7.0")
解决方案
要实现和常规资源触发器一致的父流水线关联显示,需修正API请求中的JSON格式问题和关联字段结构,具体修改如下:
- 修复JSON语法错误:在
project字段末尾添加逗号,避免请求体解析失败 - 调整
triggeredByBuild结构:将其从字符串格式改为嵌套JSON对象(原代码错误地将该对象包裹为字符串,导致Azure DevOps无法识别关联关系) - 优化参数格式:
templateParameters可直接传递JSON对象(若保持字符串格式需确保转义正确)
修正后的curl代码:
# Trigger deployment pipeline RESPONSE=$(curl -X POST \ -H "Content-Type: application/json" \ -u :$(System.AccessToken) \ --data "{ 'definition': { 'id': $PIPELINE_ID }, 'templateParameters': {\"deployReason\": \"automated\"}, 'reason': 'buildCompletion', 'project': {'id': $SYSTEM_PROJECTID}, 'triggeredByBuild': { \"definitionId\": $SYSTEM_DEFINITIONID, \"id\": $BUILD_BUILDID, \"buildNumber\": \"$BUILD_BUILDNUMBER\" } }" \ "$SYSTEM_COLLECTIONURI/$SYSTEM_TEAMPROJECT/_apis/build/builds?api-version=7.0")
说明:
- 修正后
triggeredByBuild作为嵌套对象传递,Azure DevOps会识别该关联并在子流水线页面显示父流水线的可点击链接 - 若
BUILD_BUILDNUMBER包含特殊字符,需添加双引号包裹确保JSON格式正确
内容的提问来源于stack exchange,提问作者petrovski
相关产品推荐
相关产品推荐

