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

如何让其他仓库的GitHub Actions工作流访问私有GitHub Packages NPM包

问题描述

我们正从本地部署方案迁移至GitHub,项目「pink」构建时依赖@organization作用域的NPM包,但GitHub Actions执行npm ci时始终报403 Forbidden错误,无法访问已迁移到GitHub Packages的@organization/violet包。

已完成的操作:

  • 将「violet」包从本地Nexus迁移至GitHub Packages,可在GitHub Packages中正常查看
  • 为「pink」仓库配置了包访问权限
  • 尝试过在Actions中使用GITHUB_TOKEN和个人访问令牌(PAT),均无法解决403问题
  • 本地环境需先执行npm login才能安装该包,直接在URL中带令牌无效
解决方案

1. 修正.npmrc的配置格式

你当前的.npmrc写入命令格式有误,令牌不应拼在registry URL后面,正确配置方式如下:

方式一:手动写入规范的.npmrc

- name: Use Node.js 16
  uses: actions/setup-node@v3
  with:
    node-version: 16.x
    registry-url: 'https://npm.pkg.github.com'
    scope: '@organization'
- run: echo "//npm.pkg.github.com/:_authToken=${{ secrets.GITHUB_TOKEN }}" >> ~/.npmrc
- run: npm ci

方式二:利用actions/setup-node内置参数配置(更可靠)

直接通过setup-node的参数注入令牌,避免手动写入出错:

- name: Use Node.js 16
  uses: actions/setup-node@v3
  with:
    node-version: 16.x
    registry-url: 'https://npm.pkg.github.com'
    scope: '@organization'
    token: ${{ secrets.GITHUB_TOKEN }}
- run: npm ci

2. 确认令牌的权限配置

针对默认GITHUB_TOKEN

默认的GITHUB_TOKEN权限有限,需在工作流顶部添加权限声明:

name: Build Pink Project
on: [push, pull_request]

permissions:
  packages: read  # 赋予读取GitHub Packages的权限
  contents: read  # 拉取仓库代码所需权限

针对跨仓库访问场景(「pink」和「violet」为不同仓库)

默认GITHUB_TOKEN仅能访问当前仓库资源,此时需使用个人访问令牌(PAT),并确保PAT具备以下权限:

  • read:packages:允许读取GitHub Packages
  • repo:若「violet」所在仓库为私有仓库,需添加该权限

将PAT存入「pink」仓库的Secrets(例如命名为ORG_PACKAGES_TOKEN),然后在工作流中替换使用:

- name: Use Node.js 16
  uses: actions/setup-node@v3
  with:
    node-version: 16.x
    registry-url: 'https://npm.pkg.github.com'
    scope: '@organization'
    token: ${{ secrets.ORG_PACKAGES_TOKEN }}
- run: npm ci

3. 确认包的访问权限设置

进入@organization/violet包的GitHub Packages页面,检查:

  • 「pink」仓库已被添加到包的访问权限列表,权限级别为「读取」
  • 若使用组织级权限,确保「pink」仓库所属的团队/用户具备读取该包的权限

4. 检查项目依赖配置

  • 确保「pink」的package.json中,@organization/violet的版本号与GitHub Packages上发布的版本完全一致(部分情况下403错误会掩盖版本不存在的问题)
  • 不要在package.json中为该依赖单独指定registry字段,确保依赖解析遵循.npmrc中配置的@organization作用域规则

5. 本地验证令牌有效性

在本地测试PAT是否能正常拉取包,执行命令:

npm install @organization/violet --registry=https://npm.pkg.github.com --//npm.pkg.github.com/:_authToken=你的PAT

如果本地能成功安装,说明令牌权限没问题,问题出在Actions的配置上;如果本地也失败,需检查PAT的权限或包的访问设置。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.06 20:02:37