如何在 Azure DevOps 中为新建工作项自动设置父级 Feature?
数据阿明
结论
YAML 示例是否适用,要看它是否包含所需的工作项更新逻辑。单独的 pipeline YAML 不会自动订阅“创建工作项”事件。你需要先通过 webhook 或其他服务钩子触发自动化流程,再由流程调用 Azure DevOps REST API,为新工作项添加父级关系。
你已经创建了 webhook,可以先检查它是否能启动 pipeline,以及事件负载是否包含新建工作项的 ID。如果 webhook 只发送事件通知,就需要通过接收端或中间服务启动 pipeline,并将工作项 ID 传给它。
建议的处理流程
- 配置工作项创建事件订阅,并将事件发送到可以启动 pipeline 的接收端。
- 从事件负载中取得新建工作项的 ID,并传给 pipeline。字段名取决于 webhook 负载格式,检查负载前不要假定字段路径。
- 在 pipeline 中调用 Azure DevOps REST API,为子工作项添加指向目标 Feature 的层级关系。
- 确认该工作项尚未关联其他父级,并检查 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 返回的状态码和错误正文。
备注:内容仅供参考。
