PAYATHON 2026

如何在 Azure DevOps 中为新建工作项自动设置父级 Feature?

数据阿明

结论

YAML 示例是否适用,要看它是否包含所需的工作项更新逻辑。单独的 pipeline YAML 不会自动订阅“创建工作项”事件。你需要先通过 webhook 或其他服务钩子触发自动化流程,再由流程调用 Azure DevOps REST API,为新工作项添加父级关系。

你已经创建了 webhook,可以先检查它是否能启动 pipeline,以及事件负载是否包含新建工作项的 ID。如果 webhook 只发送事件通知,就需要通过接收端或中间服务启动 pipeline,并将工作项 ID 传给它。

建议的处理流程

  1. 配置工作项创建事件订阅,并将事件发送到可以启动 pipeline 的接收端。
  2. 从事件负载中取得新建工作项的 ID,并传给 pipeline。字段名取决于 webhook 负载格式,检查负载前不要假定字段路径。
  3. 在 pipeline 中调用 Azure DevOps REST API,为子工作项添加指向目标 Feature 的层级关系。
  4. 确认该工作项尚未关联其他父级,并检查 pipeline 使用的身份是否有权读取和编辑相关工作项。

如果你引用的 YAML 示例已经实现第 3 步,可以复用其中的逻辑,但仍需单独配置事件触发和 ID 传递。如果示例的用途或输入参数不匹配,可以保留触发配置,只调整更新工作项的部分。

更新父级关系的示例

Azure DevOps 工作项更新接口支持通过 JSON Patch 添加层级关系。下面的 Bash 示例假设 CHILD_ID 和 PARENT_ID 已由触发流程提供,运行环境中也有 curl。API 版本需要根据你的 Azure DevOps 环境支持情况调整。

ORG="your-organization"
PROJECT="your-project"
CHILD_ID="123"
PARENT_ID="456"

CHILD_URL="https://dev.azure.com/${ORG}/${PROJECT}/_apis/wit/workitems/${CHILD_ID}?api-version=7.1"
PARENT_URL="https://dev.azure.com/${ORG}/${PROJECT}/_apis/wit/workitems/${PARENT_ID}"

curl --fail-with-body --request PATCH \
  --url "$CHILD_URL" \
  --header "Authorization: Bearer ${SYSTEM_ACCESSTOKEN}" \
  --header "Content-Type: application/json-patch+json" \
  --data "[{\"op\":\"add\",\"path\":\"/relations/-\",\"value\":{\"rel\":\"System.LinkTypes.Hierarchy-Reverse\",\"url\":\"${PARENT_URL}\"}}]"

这种关系类型表示从子工作项指向父工作项。实际使用时,应从触发事件或 pipeline 参数中取得 ID,不要在生产脚本中固定示例 ID。如果 pipeline 使用 System.AccessToken 进行身份验证,还需确认作业令牌已启用,并具有访问相应项目和工作项的权限。不要将 PAT 明文写入 YAML。

排查时检查

  • webhook 是否订阅了工作项创建事件,而不是其他工作项变更事件。
  • webhook 接收端能否启动 pipeline,并传入正确的子工作项 ID。
  • 父级 Feature ID 是否有效,以及工作项类型和项目是否符合层级配置。
  • 子工作项是否已有父级。如果有,先读取当前关系,再决定跳过还是调整,以免添加冲突关系。
  • pipeline 使用的身份是否有权编辑该工作项;同时检查 REST API 返回的状态码和错误正文。

备注:内容仅供参考。