Azure DevOps运行流水线时出现401未授权错误,寻求流水线访问Feed制品包的其他权限配置方案
遇到这种401未授权的问题确实挺闹心的,我来给你分享几个除了直接配置Feed权限之外的可行方案,帮你搞定流水线访问制品包的问题:
确认流水线实际使用的Build Service账户:很多时候容易混淆项目级和组织级的Build Service账户。你当前配置的是项目级的
[project-name] Build Service ([company-name]),可以再排查下流水线实际调用的是不是这个账户——如果是组织级流水线,可能会用到Project Collection Build Service ([company-name]),给这个账户也添加上Contributor/Reader权限试试。利用任务内置的身份验证能力:比如在NuGet、Maven或DotNet这类拉取制品的任务中,直接选择对应的Azure Artifacts Feed,Azure Pipelines会自动使用流水线的托管身份完成验证,不需要额外手动配置权限(前提是流水线和Feed在同一组织下)。如果是用脚本执行拉取操作,比如
dotnet restore,可以搭配Azure Artifacts的专用命令(如az artifacts universal download),它会自动适配流水线身份,避免权限问题。排查自托管代理的运行身份:如果你的流水线用的是自托管代理,那代理运行的本地账户需要具备访问Feed的权限。比如代理是用域账户启动的,这个域账户得在Feed的权限列表里有对应的访问权限,或者能通过Azure AD完成身份验证。
确认Feed的项目访问范围:如果你的Feed是组织级的,需要在Feed设置里把流水线所在的项目添加到「允许访问的项目」列表中;如果是项目级Feed,也要确保流水线所在的项目和Feed归属的项目一致,避免跨项目访问的权限限制。
清理流水线缓存:有时候缓存的旧凭据会导致验证失败,可以在流水线中添加清理缓存的步骤,比如NuGet任务前执行
nuget locals all -clear,或者DotNet任务前执行dotnet nuget locals all --clear,清除旧的身份验证缓存后再尝试拉取制品。
备注:内容来源于stack exchange,提问作者Amargi

