我可以授予管道权限,以便它可以使用 API 读取 Azure Devops 中不同项目的信息吗?

Can I grant permissions to a pipeline so it can read information for a different project in Azure Devops using the API?

我正在尝试使用此 Azure DevOps API 调用:

GET https://dev.azure.com/{organization}/_apis/projects/{projectId}?api-version=5.1

已记录 here,以便在我拥有项目 ID 时检索项目名称。请注意,管道正在尝试检索与其定义的项目不同的项目信息。这是代码,它在管道提供自己的项目 ID 时有效:

  $VstsBaseRestUrl = "$(System.TeamFoundationCollectionUri)"

  $projectsUrl = "$VstsBaseRestUrl/_apis/projects/${{ parameters.project }}?api-version=5.1"

  $rawResponse = Invoke-WebRequest -UseDefaultCredentials -Uri $projectsUrl -Method Get -ContentType "application/json" -Headers @{
        Authorization = "Bearer $env:SYSTEM_ACCESSTOKEN"
    }

响应返回为:

{"$id":"1","innerException":null,"message":"VS800075: The project with id 'vstfs:///Classification/TeamProject/xxxxx' does not exist, or you do not have permission to access it.","typeName":"Microsoft.TeamFoundation.Core.WebApi.ProjectDoesNotExistException, Microsoft.TeamFoundation.Core.WebApi","typeKey":"ProjectDoesNotExistException","errorCode":0,"eventId":3000}

我使用的是正确的项目 ID,那么如何授予管道授权此调用的权限?

注意:如果不需要,我宁愿不使用 PAT,即以某种方式将其授予构建帐户,以便 SYSTEM_ACCESSTOKEN 方法继续工作。

  • 如何授予管道授权此调用的权限?

假设您调用 above rest api 从项目 A 的管道中检索项目 B 的信息。

您需要将项目A的构建服务账号授予项目B中的View project-level information,下面是详细步骤。

1、进入项目B(你要获取信息的项目)的项目设置 --> 权限 -- > select 建立管理员组(也可以新建组)

2、点击Build Administrator组的Members选项卡 --> 点击Add --> 添加项目A的构建服务账户.

项目A的构建服务账号是这样的:NameofProjectA Build Service (NameofOrganization) eg. ProjectA 构建服务 (MyOrganization)

可选:

您也可以在项目B中新建一个群组,将项目A的构建服务账号添加到其成员中。并确保允许View project-level information