从Github操作检索Github注册表npm包
我已经成功地将@myorganization/my super lib部署为GH npm包。现在我想在另一个GH项目中使用它 这是一个私有库,也是一个私有项目(记住这一点很重要,因为这一点与公共项目没有关系) 在本地,没有问题,只需在我的npm配置中添加正确的authtoken配置和我的个人令牌 现在,当使用Github操作时,我不确定令牌访问库包的优雅解决方案是什么。文档上说使用个人的,但是如果我离开组织怎么办?我也可以为此使用专门的技术帐户,但这似乎不是“正确”的解决方案 有谁有更好的主意吗从Github操作检索Github注册表npm包,npm,yarnpkg,github-actions,github-package-registry,Npm,Yarnpkg,Github Actions,Github Package Registry,我已经成功地将@myorganization/my super lib部署为GH npm包。现在我想在另一个GH项目中使用它 这是一个私有库,也是一个私有项目(记住这一点很重要,因为这一点与公共项目没有关系) 在本地,没有问题,只需在我的npm配置中添加正确的authtoken配置和我的个人令牌 现在,当使用Github操作时,我不确定令牌访问库包的优雅解决方案是什么。文档上说使用个人的,但是如果我离开组织怎么办?我也可以为此使用专门的技术帐户,但这似乎不是“正确”的解决方案 有谁有更好的主意吗
评论后编辑:起初我认为我可以简单地使用GITHUB_令牌,但它仅限于访问当前存储库,考虑到这一点,从安全角度来看这是合乎逻辑的。我个人使用该脚本(
.GITHUB/workflows/my super workflow file.yml
)
没有比使用个人访问令牌更好的选择,即:
- 从具有读取权限的帐户创建个人
access令牌read:packages
- 将该令牌作为“机密”插入存储库(在其中执行Github操作)
- 通过Github操作工作流中的Secrets访问令牌,以验证并安装存储在Github注册表中的依赖项
:定义包注册表的范围操作/设置-node@v1
:与npm安装
access一起使用。此令牌应由任何可以访问您使用的私有github包的github帐户创建,并作为使用该操作的repo的机密存储李>read,repo
--ignore scripts
是一个可选标志,它增加了额外的保护,防止恶意脚本窃取您的个人访问令牌
例如:
steps:
- uses: actions/checkout@v2
- uses: actions/setup-node@v1
with:
node-version: '12.x'
registry-url: 'https://npm.pkg.github.com'
scope: '@antecha'
- run: npm install --ignore-scripts
env:
NODE_AUTH_TOKEN: ${{ secrets.PERSONAL_ACCESS_TOKEN }}
更新:回购示例:
- 我提到的个人访问令牌可以由任何有权访问私有注册表的帐户创建。对于orgs来说,最好是在github上创建一个管理员配置文件/帐户,其唯一目的是管理此类令牌或/和orgs对第三方应用程序的github身份验证李>
npm ci
访问我甚至不拥有的包时失败:npm ERR!401未经授权-获取https://npm.pkg.github.com/onekiloparsec/babel-helper-vue-jsx-merge-props -无法通过令牌检索用户
我添加了作者自己找到的答案(请参见注释),以便更快地查找。祈祷不久会有更好的选择:-)投票来缓解标签混淆。你描述的是我的现状,而不是回答问题:)顺便说一句,问题的标题有点误导。我在寻找实现标题所述的方法时发现了这个问题:从Github操作中检索Github注册表npm包
,由于此处的现有解决方案不起作用,我发布了我的解决方案。我会留下我的答案,因为它可能会帮助来到这里的人们,不管他们是否想使用个人代币。好吧,这是一个有效的观点,删除我的反对票。对于你的问题,你也可以看看这个,因为我们的构建有很多链式动作,我使用一个模板.nprmc,一个用秘密替换占位符的动作,然后不必为每个步骤填充环境变量。
steps:
- uses: actions/checkout@v2
- uses: actions/setup-node@v1
with:
node-version: '12.x'
registry-url: 'https://npm.pkg.github.com'
scope: '@antecha'
- run: npm install --ignore-scripts
env:
NODE_AUTH_TOKEN: ${{ secrets.PERSONAL_ACCESS_TOKEN }}