在自定义任务中访问 Azure DevOps 其他部分的身份验证

Authentication to access other parts of Azure DevOps within a custom task

我想创建一个访问 Azure DevOps 其他部分的 Azure DevOps 自定义任务。具体来说,我想创建一个向 PR 添加评论的自定义任务。

不幸的是,我不知道如何正确地进行身份验证。我找到这段代码并将其添加到我的任务中:

let token: string = tl.getEndpointAuthorizationParameter("SYSTEMVSSCONNECTION", "AccessToken", false);
let collectionUrl: string = tl.getEndpointUrl("SYSTEMVSSCONNECTION", false).replace(".vsrm.visualstudio.com", ".visualstudio.com");
let authHandler = token.length === 52 ? vsts.getPersonalAccessTokenHandler(token) : vsts.getBearerHandler(token);
let connection = new vsts.WebApi(collectionUrl, authHandler);

但我收到错误消息:

TF401027: You need the Git 'PullRequestContribute' permission to perform this action. Details: identity 'Build\XXXXXXXX-XXXX-XXXX-XXXX-XXXXXXXXXXXX', scope 'repository'.

我已验证构建服务应具有正确的权限:

我也试过在作业设置中选中 "Allow scripts to access the OAuth token" 框,但没有效果。

我错过了什么?

我认为你应该使用 "System.AccessToken" 变量来获取令牌:

tl.getVariable('System.AccessToken'); 

Predefined build variables - System.AccessToken

我在构建任务中使用它:https://github.com/ashamrai/AzureDevOpsExtensions/blob/master/CustomBuildTask/NewWICustomTask/index.ts

您需要为构建用户授予权限:

在 Microsoft 托管代理中是“构建服务(用户名)”和“项目集合构建服务(项目)”(有时最后一个仅在您在“搜索”中键入 UUID (8837...) 时显示对于用户或组。)

可以在项目设置 > 存储库 > 权限中找到