求助:如何从Azure DevOps获取Scrum团队成员角色及区域路径?
获取Azure DevOps团队角色成员与区域路径的解决方案
一、REST API 正确调用流程
你之前的API仅获取了团队基础成员,未拿到角色和区域路径,是因为这类数据需要通过不同端点分步获取:
获取项目下所有团队(解决团队名称不全问题)
GET https://dev.azure.com/{org}/{project}/_apis/teams?api-version=7.1-preview.3返回项目内所有团队的ID、名称等基础信息。
获取团队对应的区域路径
团队默认区域路径存储在团队设置中:GET https://dev.azure.com/{org}/{project}/_apis/work/teamsettings/{teamId}?api-version=7.1-preview.1提取响应中的
defaultAreaPath字段即可得到目标路径。获取团队角色(安全组)
Azure DevOps中团队角色对应内置安全组,通过团队ID可获取所有关联角色:GET https://dev.azure.com/{org}/{project}/_apis/teams/{teamId}/securityroles?api-version=7.1-preview.1响应包含角色名称(如Product Owner、Scrum Master)及其安全组描述符。
获取角色组下的成员
用角色的descriptor调用成员接口:GET https://dev.azure.com/{org}/_apis/security/groups/{roleDescriptor}/members?api-version=7.1-preview.1得到该角色下所有成员的姓名、邮箱等信息。
二、Python 实现示例
使用官方azure-devops SDK可简化API调用,自动处理权限和分页:
- 先安装依赖:
pip install azure-devops - 代码示例:
from azure.devops.connection import Connection from msrest.authentication import BasicAuthentication # 配置参数 ORG_URL = "https://dev.azure.com/你的组织名" PROJECT_NAME = "你的项目名" PAT = "你的PAT令牌" # 需要项目读取、安全读取权限 # 建立连接 creds = BasicAuthentication("", PAT) conn = Connection(base_url=ORG_URL, creds=creds) # 获取客户端 core_client = conn.clients.get_core_client() work_client = conn.clients.get_work_client() security_client = conn.clients.get_security_client() # 1. 获取所有团队 teams = core_client.get_teams(project=PROJECT_NAME) for team in teams: print(f"\n=== 团队: {team.name} ===") # 2. 获取区域路径 team_settings = work_client.get_team_settings(team_id=team.id, project=PROJECT_NAME) print(f"区域路径: {team_settings.default_area_path}") # 3. 获取团队角色 team_roles = security_client.get_security_roles(scope_id=team.id, scope_type="Team") target_roles = ["Product Owner", "Scrum Master", "QA Lead", "Dev Lead"] for role in team_roles: if role.name in target_roles: print(f"\n角色: {role.name}") # 4. 获取角色成员 members = security_client.get_group_members(descriptor=role.descriptor) for member in members: print(f"- {member.display_name} ({member.unique_name})")
三、Power Automate 实现步骤
按以下流程配置即可获取完整数据:
- 初始化变量:创建字符串变量存储组织名、项目名、PAT令牌。
- 获取所有团队:添加HTTP动作,方法选GET,URL填
https://dev.azure.com/@{variables('组织名')}/@{variables('项目名')}/_apis/teams?api-version=7.1-preview.3,认证选Basic,用户名留空,密码填PAT。 - 遍历团队:添加“应用到每一个”动作,选择HTTP响应的
value数组。 - 获取区域路径:循环内添加HTTP动作,URL填
https://dev.azure.com/@{variables('组织名')}/@{variables('项目名')}/_apis/work/teamsettings/@{items('Apply_to_each')?['id']}?api-version=7.1-preview.1,提取defaultAreaPath保存到变量。 - 获取团队角色:循环内添加HTTP动作,URL填
https://dev.azure.com/@{variables('组织名')}/@{variables('项目名')}/_apis/teams/@{items('Apply_to_each')?['id']}/securityroles?api-version=7.1-preview.1。 - 过滤目标角色:添加第二个“应用到每一个”动作,遍历角色响应的
value,添加条件判断items('Apply_to_each_2')?['name']是否在['Product Owner', 'Scrum Master', 'QA Lead', 'Dev Lead']中。 - 获取角色成员:条件分支内添加HTTP动作,URL填
https://dev.azure.com/@{variables('组织名')}/_apis/security/groups/@{items('Apply_to_each_2')?['descriptor']}/members?api-version=7.1-preview.1。 - 整合数据:用“组合”动作将团队名称、区域路径、角色、成员信息拼接成JSON对象,最终可输出到Excel或存储为文件。
关键注意事项
- PAT权限:必须给PAT分配
项目和团队(读取)、安全(读取)权限,否则会返回权限不足错误。 - 自定义角色:如果QA Lead、Dev Lead是自定义角色,需确认API返回的角色名称与你设置的一致,或改用角色ID过滤。
- 分页处理:当团队/成员数量超过100时,API会返回
continuationToken,Python SDK自动处理,Power Automate需手动判断并循环调用直到无token。
内容的提问来源于stack exchange,提问作者user11737195
相关产品推荐
相关产品推荐

