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

使用Poetry在CI/CD任务中发布Python包到GitLab仓库遇401未授权错误

GitLab CI Poetry推包401未授权问题排查与解决

针对你遇到的401错误,结合GitLab SaaS环境和Poetry 1.8.3的场景,按以下步骤排查修复:

1. 启用项目级CI作业令牌的包访问权限

进入你的项目设置:

  • 打开项目 → 点击左侧菜单「设置」→「CI/CD」
  • 找到「令牌权限」区域,勾选「允许作业令牌访问包注册表」
  • 保存设置后重新运行作业

(你之前找的组令牌设置是另一种场景,这里不需要组令牌,只需要项目级的这个开关)

2. 在CI作业中显式声明权限范围

GitLab 15.7及之后的SaaS版本,CI_JOB_TOKEN默认权限受限,必须在.gitlab-ci.yml的作业块中添加permissions配置,明确授予包写入权限:

publish:
  stage: publish
  image: python:3.12
  script:
    - # 你的Poetry配置和发布命令
  permissions:
    packages: write
    contents: read  # 若作业需要拉取代码或依赖,需添加此项

3. 验证Poetry配置的准确性

在作业的script中添加调试命令,确认配置是否正确加载:

- poetry config --list  # 输出所有Poetry配置,检查gitlab仓库地址和http-basic信息
- echo "${CI_API_V4_URL}/projects/${CI_PROJECT_ID}/packages/pypi"  # 验证仓库URL是否正确

另外,若CI_JOB_TOKEN包含特殊字符,需用引号包裹变量避免解析错误:

- poetry config http-basic.gitlab gitlab-ci-token "$CI_JOB_TOKEN"

4. 检查包版本是否重复

GitLab包注册表不允许重复发布同一版本的包,若目标版本已存在,会返回401(错误提示不明确)。解决方法:

  • 前往项目左侧菜单「包」→「包注册表」,检查是否有相同版本的包
  • 若存在,删除旧版本或修改pyproject.toml中的版本号后重新发布

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.18 03:33:13