通过API关联Azure DevOps构建与Jira Release 追踪交付需求
核心流程概述
通过API完成三个关键环节:从Azure DevOps构建提取关联工作项 → 映射到对应Jira Issue → 将Issue关联到目标Jira Release,从而实现构建交付需求的追踪。
步骤1:从Azure DevOps构建获取关联的工作项
获取构建详情
调用Azure DevOps Build API获取指定构建的完整信息,其中包含关联的工作项列表:GET https://dev.azure.com/{组织名}/{项目名}/_apis/build/builds/{构建ID}?api-version=7.1-preview.7响应中解析
workItems数组,提取每个工作项的id和url。获取工作项的Jira关联信息
针对每个工作项ID,调用Work Item API获取详情,重点提取预先配置的Jira Issue Key自定义字段(需提前在Azure DevOps工作项模板中添加该字段,用于存储对应Jira Issue的Key):GET https://dev.azure.com/{组织名}/{项目名}/_apis/wit/workitems/{工作项ID}?api-version=7.1-preview.3解析响应中的自定义字段值(例如字段名为
Custom.JiraIssueKey),得到对应的Jira Issue Key(如PROJ-123)。
步骤2:定位或创建目标Jira Release
查询现有Release
调用Jira版本API,根据项目Key获取所有Release(版本),筛选出目标Release(可通过名称、状态或发布日期匹配):GET /rest/api/3/project/{项目Key}/versions从响应中提取目标Release的
id(后续关联Issue需要用到)。创建新Release(若需)
如果目标Release尚未创建,调用Jira版本创建API生成新Release:POST /rest/api/3/version Content-Type: application/json请求体示例:
{ "name": "Release v1.0.0", "project": { "key": "{项目Key}" }, "releaseDate": "2024-05-20", "status": "released" }
步骤3:关联Jira Issue到目标Release
单个Issue关联
针对每个Jira Issue Key,调用Issue编辑API,更新fixVersions字段,添加目标Release的ID:PUT /rest/api/3/issue/{IssueKey} Content-Type: application/json请求体示例:
{ "fields": { "fixVersions": [ { "id": "{ReleaseID}" } ] } }批量Issue关联
若需关联多个Issue,使用Jira批量编辑API减少请求次数:POST /rest/api/3/issue/bulk Content-Type: application/json请求体示例:
{ "update": { "fixVersions": [ { "add": { "id": "{ReleaseID}" } } ] }, "issues": [ { "id": "{IssueID1}" }, { "id": "{IssueID2}" } ] }
步骤4:(可选)在Azure DevOps构建中标记Jira Release关联
为了双向追溯,可更新Azure DevOps构建的标签或自定义属性,添加Jira Release的标识:
PATCH https://dev.azure.com/{组织名}/{项目名}/_apis/build/builds/{构建ID}?api-version=7.1-preview.7 Content-Type: application/json
请求体示例:
{ "tags": ["JIRA-REL-v1.0.0"] }
关键注意事项
- 工作项映射基础:必须确保Azure DevOps工作项与Jira Issue存在明确的映射关系(通过自定义字段存储Jira Key是最可靠的方式),否则无法完成关联。
- 权限配置:Azure DevOps需生成具有「Build读取/编辑」权限的PAT;Jira需生成具有「Issue编辑/项目版本管理」权限的API令牌。
- 异常处理:需处理API请求失败的场景(如工作项无Jira Key、Release不存在、权限不足等),建议添加重试机制和日志记录。
内容的提问来源于stack exchange,提问作者Sandeep Kumar

