【问题标题】:Publishing NuGet packages to Azure Artifacts from PR's从 PR 将 NuGet 包发布到 Azure Artifacts
【发布时间】:2019-11-08 05:25:14
【问题描述】:

Azure Artifacts 包可以公开使用吗?如果是这样,我想将 NuGet 包从 PR 发布到我的 GitHub project。我目前从 PR 构建中收到以下权限错误:

[警告]Warning_SessionCreationFailed {"statusCode":500,"result":{"$id":"1","innerException":null,"message":"用户 '89e4e6df-0ac0-471f-ba63-0270050c3b79' 缺少完成权限 这个动作。你需要有 'ReadPackages'。","typeName":"Microsoft.VisualStudio.Services.Feed.WebApi.FeedNeedsPermissionsException, Microsoft.VisualStudio.Services.Feed.WebApi","typeKey":"FeedNeedsPermissionsException","errorCode":0,"eventId":3000}} [错误]错误:进程“/usr/bin/dotnet”失败,退出代码为 1 [error]包发布失败

我正在使用azure-pipelines.yml 文件。这是我的 Azure Pipelines 构建的 link

更新 1

这些是我已经添加到我的提要中的用户/组:

这些是我可以添加到我的提要中的用户/组,我还没有这样做:

更新 2

这是我用来发布 NuGet 包的 Azure Pipelines 任务的 yaml:

- task: DotNetCoreCLI@2
  displayName: 'Dotnet NuGet Push'
  inputs:
    command: push
    nuGetFeedType: internal
    packagesToPush: '/home/vsts/work/1/Windows/*.nupkg'
    publishVstsFeed: schema-net

【问题讨论】:

  • 在提要设置中检查“项目集合构建服务(用户名)”是否有权限
  • 但是在 GitHub 上提交 PR 的用户可以是任何人。
  • 但是buid运行的是特殊用户,而不是触发PR的用户

标签: github azure-devops nuget azure-artifacts


【解决方案1】:

根据错误信息,您的账户没有您想要操作的那个提要的权限。

您需要验证您的帐户对您尝试推送到的供稿是否具有贡献者或更高权限。

另外,Project Collection Build Service 组是默认贡献者。而且,作为default setting,它不包括帐户Project Collection Build Service(xxxx)作为成员。因此,如果您是所有者,您可能需要将 Project Collection Build Service(xxxx) 帐户添加到 Project Collection Build Service 组中。

编辑:

当我从后端检查您的组织信息时,我发现您的错误消息中显示的 user(89e4e6df-0ac0-xxxxxx-0270050c3b79) 是一个服务标识 帐户。它的领域是构建。它是一个特殊的帐户,而不是可能创建或触发 pr 的普通用户。因此,如果您不授予此服务身份帐户的权限,它将无权访问您要推送到的提要。

此外,您组织中此安全帐户的直接父组是[组织名称]\Security Service Group。您可以在您的组织设置下检查它。您还可以在 Feed 下查看其权限。

因此,为了解决,您需要将此服务身份帐户添加到您的提要设置中,并授予其贡献者或更高角色。

第二次更新

为了清楚明白,让我澄清一些细节。

起初,根据日志中显示的错误消息说缺少ReadPackage权限,我首先考虑了您要在任务中推送的Feed的权限。

另外,日志中也显示的用户号,89e4e6df-0ac0-xxxxxx-0270050c3b79。正如我从后端检查的那样,它是一个代表构建服务帐户的 VSID:Schema.NET Build Service (schema-net)。所以,首先,很容易认为这个账号没有相关权限,无法推送包。

但是,在您更新提要设置后,我会再次从后端检查用户 VSID 并查看错误日志。我想通了。根据#20190625.1的日志,可以看到获取源码包时开始报错:

##[警告]Can\'t find loc string for key: 警告_SessionCreationFailed

由于此错误,未能创建正确的包源包路径,导致服务账号无权访问,因为路径错误:

其实正确的源码包url应该是这样的(可以参考#2029062502)

https://pkgs.dev.azure.com/schema-net/_packaging/f43386ca-{package id}-d2f8da200fb3/nuget/v3/index.json

现在,我认为这是关于 nuget.config 文件配置的问题。

【讨论】:

  • 如果我将代码提交到我的 GitHub 存储库,我可以成功构建。只有当 PR 导致构建开始时,我才会收到上述错误。
  • @MuhammadRehanSaeed 我已经更新了我的答案,请查看。
  • 根据截图和后台查看,账号vsid“89e4e6df-xxxx-0270050c3b79”是用户账号“Schema.NET Build Service (schema-net)”,你已经添加了,授予 Feed 权限。我再次查看了您的错误日志,发现在访问包源时发生了缺少权限。另一方面,账户 89e-xxx-b79 无法正确获取包源,因为 Can\'t find loc string for key:Warning_SessionCreationFailed。我将进一步分析此错误并稍后更新我的答案。
  • @MuhammadRehanSaeed 我已经更新了我的最新答案,请查看。
  • 我自己没有指定 NuGet 提要 URL。我正在使用将publishVstsFeed 设置为schema-net 的Azure Pipelines NuGet 推送任务。请参阅完整 yaml 的更新问题。那么这是任务中的错误吗?
猜你喜欢
  • 2020-01-30
  • 1970-01-01
  • 1970-01-01
  • 2022-10-05
  • 2021-07-10
  • 1970-01-01
  • 2020-08-23
  • 2021-05-06
  • 2023-01-29
相关资源
最近更新 更多