You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

求助:如何从Azure DevOps获取Scrum团队成员角色及区域路径?

获取Azure DevOps团队角色成员与区域路径的解决方案

一、REST API 正确调用流程

你之前的API仅获取了团队基础成员,未拿到角色和区域路径,是因为这类数据需要通过不同端点分步获取:

  1. 获取项目下所有团队(解决团队名称不全问题)

    GET https://dev.azure.com/{org}/{project}/_apis/teams?api-version=7.1-preview.3
    

    返回项目内所有团队的ID、名称等基础信息。

  2. 获取团队对应的区域路径
    团队默认区域路径存储在团队设置中:

    GET https://dev.azure.com/{org}/{project}/_apis/work/teamsettings/{teamId}?api-version=7.1-preview.1
    

    提取响应中的defaultAreaPath字段即可得到目标路径。

  3. 获取团队角色(安全组)
    Azure DevOps中团队角色对应内置安全组,通过团队ID可获取所有关联角色:

    GET https://dev.azure.com/{org}/{project}/_apis/teams/{teamId}/securityroles?api-version=7.1-preview.1
    

    响应包含角色名称(如Product Owner、Scrum Master)及其安全组描述符。

  4. 获取角色组下的成员
    用角色的descriptor调用成员接口:

    GET https://dev.azure.com/{org}/_apis/security/groups/{roleDescriptor}/members?api-version=7.1-preview.1
    

    得到该角色下所有成员的姓名、邮箱等信息。

二、Python 实现示例

使用官方azure-devops SDK可简化API调用,自动处理权限和分页:

  1. 先安装依赖:
    pip install azure-devops
    
  2. 代码示例:
    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 实现步骤

按以下流程配置即可获取完整数据:

  1. 初始化变量:创建字符串变量存储组织名、项目名、PAT令牌。
  2. 获取所有团队:添加HTTP动作,方法选GET,URL填https://dev.azure.com/@{variables('组织名')}/@{variables('项目名')}/_apis/teams?api-version=7.1-preview.3,认证选Basic,用户名留空,密码填PAT。
  3. 遍历团队:添加“应用到每一个”动作,选择HTTP响应的value数组。
  4. 获取区域路径:循环内添加HTTP动作,URL填https://dev.azure.com/@{variables('组织名')}/@{variables('项目名')}/_apis/work/teamsettings/@{items('Apply_to_each')?['id']}?api-version=7.1-preview.1,提取defaultAreaPath保存到变量。
  5. 获取团队角色:循环内添加HTTP动作,URL填https://dev.azure.com/@{variables('组织名')}/@{variables('项目名')}/_apis/teams/@{items('Apply_to_each')?['id']}/securityroles?api-version=7.1-preview.1。
  6. 过滤目标角色:添加第二个“应用到每一个”动作,遍历角色响应的value,添加条件判断items('Apply_to_each_2')?['name']是否在['Product Owner', 'Scrum Master', 'QA Lead', 'Dev Lead']中。
  7. 获取角色成员:条件分支内添加HTTP动作,URL填https://dev.azure.com/@{variables('组织名')}/_apis/security/groups/@{items('Apply_to_each_2')?['descriptor']}/members?api-version=7.1-preview.1。
  8. 整合数据:用“组合”动作将团队名称、区域路径、角色、成员信息拼接成JSON对象,最终可输出到Excel或存储为文件。

关键注意事项

  • PAT权限:必须给PAT分配项目和团队(读取)、安全(读取)权限,否则会返回权限不足错误。
  • 自定义角色:如果QA Lead、Dev Lead是自定义角色,需确认API返回的角色名称与你设置的一致,或改用角色ID过滤。
  • 分页处理:当团队/成员数量超过100时,API会返回continuationToken,Python SDK自动处理,Power Automate需手动判断并循环调用直到无token。

内容的提问来源于stack exchange,提问作者user11737195

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.30 13:21:28