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

GitLab CI/CD无法访问自身NuGet仓库的问题求助

问题描述

我在GitLab.com上有一个项目仓库,构建时依赖另一GitLab.com项目的NuGet包。此前通过dotnet nuget add source ...命令添加NuGet源,搭配--store-password-in-clear-text选项,以CI/CD变量$CI_JOB_TOKEN作为密码,构建及还原操作均正常。但自上周起,构建时出现错误:

error NU1301: Unable to load the service index for source ...

我尝试改用NuGet.Config配置源,但结果相同。不过在本地Windows机器上,使用完全相同的配置(包括NuGet.Config)却能正常工作。

补充排查信息

  • 浏览器访问NuGet仓库URL可获取正确JSON响应,包名及版本拼写正确且存在于仓库中;
  • CI/CD Runner使用镜像mcr.microsoft.com/dotnet/sdk:7.0;
  • 另一GitLab项目也出现引用自GitLab的NuGet包无法找到的情况;
  • 进入构建容器安装nuget后检查仓库,始终返回警告:

WARNING: The remote server returned an error: (404) Not Found.
使用的URL与GitLab包信息中提供的完全一致,格式为:

https://gitlab.com/api/v4/groups/<groupnr>/packages/nuget/index.json
https://gitlab.com/api/v4/projects/<projectnr>/packages/nuget/index.json

请问该问题的原因是什么?


原因分析

结合你的排查信息,核心原因大概率是GitLab近期的权限规则变更,导致CI_JOB_TOKEN默认无法跨项目/跨组访问私有NuGet仓库:

  1. 权限范围收紧:GitLab近期更新了CI_JOB_TOKEN的默认权限策略,默认情况下单个项目的CI_JOB_TOKEN仅能访问当前项目内的资源,不再允许跨项目或跨组拉取私有包。之前你的配置能正常工作,是因为旧规则允许更宽松的跨项目访问。
  2. 权限验证的错误返回混淆:CI中使用CI_JOB_TOKEN请求无权限的仓库时,GitLab返回的404错误会被NuGet解析为"服务索引加载失败",而非明确的权限不足提示,导致排查方向偏差。而浏览器访问用的是你个人登录账号的权限,和CI_JOB_TOKEN的权限范围完全无关,所以能正常获取响应。
  3. 镜像NuGet版本适配问题:你使用的mcr.microsoft.com/dotnet/sdk:7.0自带的NuGet版本,对GitLab新的权限验证逻辑适配存在问题,进一步加剧了错误信息的模糊性;而本地Windows机器的NuGet版本通常更新更及时,能正确处理权限验证流程,所以可以正常工作。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.11 19:52:15