在 CircleCI 中安装 GitHub 包
Installing a GitHub Package in CircleCI
对于我的项目,我正在尝试安装(不是发布!)来自 GitHub 个软件包的 npm 软件包。它托管在组织中的私有存储库中。我已经制作了一个个人访问令牌,具有从该回购和组织中读取所需的权限。所有这些 都可以在本地 执行以下步骤:
- 在
.npmrc
文件中设置注册表:registry=https://npm.pkg.github.com/OWNER
- 终端登录:
npm login --registry=https://npm.pkg.github.com
然后它会提示:
> Username: USERNAME
> Password: TOKEN
> Email: PUBLIC-EMAIL-ADDRESS
Username
是您的标准 github 用户名
Token
是使用正确权限创建的个人访问令牌
Email
可以随意
填写后,一切正常,我可以安装 packge,以及在正常 npm 注册表上托管的所有其他包。
现在解决问题:我试图在 circleCI 上复制相同的内容,但它似乎并没有让我覆盖 npm 注册表。该项目在 package.json
所在的同一文件夹中包含一个 .npmrc
文件。这是 circle ci 会议的一部分:
- run:
name: "Set NPM registry"
command: npm config set registry https://npm.pkg.github.com/OWNER
- run:
name: "Authenticate with GitHub package registry"
command: echo "//npm.pkg.github.com/:_authToken=${GITHUB_PACKAGES}" > web_ui/frontend/.npmrc
- run:
name: "Install frontend dependencies"
command: npm run deps-frontend
GITHUB_PACKAGES
只是一个存储在 circleCI 中的环境变量。
现在错误消息告诉我以下内容:
npm ERR! code E401
npm ERR! Unable to authenticate, need: Basic realm="GitHub Package Registry"
我尝试用谷歌搜索它,但没有任何结果。
您可以尝试将 run
步移动到 pre
步吗?像这样:
pre:
- npm config set registry https://npm.pkg.github.com/OWNER
- echo "//npm.pkg.github.com/:_authToken=${GITHUB_PACKAGES}" > web_ui/frontend/.npmrc
- npm run deps-frontend
可以尝试的另一件事是使用不同版本的 npm
。
创建用于设置 .npmrc
值的命令,参见 orb 源 npm-config/set-registry
使用示例:
steps:
- checkout
- npm-config/set-registry:
registry-prurl: //your.registry.domain.net/path/
scope: '@your-scope'
auth-token: your-repo-token
- run:
name: Download depencies
command: yarn
来源:
set-registry:
description: Sets a registry to .npmrc
parameters:
registry-prurl:
description: |
protocol-relative URL (ex: //registry.domain.net/path/)
type: string
scope:
description: registry scope
type: string
auth-token:
description: authorization token for private repos
type: string
default: ""
steps:
- run:
name: Set NPM registry URL
command: >
scope=<< parameters.scope >>;
registry_prurl=<< parameters.registry-prurl >>;
npm config set "${scope}:registry" "https:$registry_prurl"
- run:
name: Set auth token for NPM registry if provided
command: |
if [ "<< parameters.auth-token >>" != "" ]; then
registry_prurl=<< parameters.registry-prurl >>;
auth_token=<< parameters.auth-token >>;
echo "${registry_prurl}:_authToken=${auth_token}" >> ~/.npmrc
fi;
对于我的项目,我正在尝试安装(不是发布!)来自 GitHub 个软件包的 npm 软件包。它托管在组织中的私有存储库中。我已经制作了一个个人访问令牌,具有从该回购和组织中读取所需的权限。所有这些 都可以在本地 执行以下步骤:
- 在
.npmrc
文件中设置注册表:registry=https://npm.pkg.github.com/OWNER
- 终端登录:
npm login --registry=https://npm.pkg.github.com
然后它会提示:
> Username: USERNAME
> Password: TOKEN
> Email: PUBLIC-EMAIL-ADDRESS
Username
是您的标准 github 用户名Token
是使用正确权限创建的个人访问令牌Email
可以随意
填写后,一切正常,我可以安装 packge,以及在正常 npm 注册表上托管的所有其他包。
现在解决问题:我试图在 circleCI 上复制相同的内容,但它似乎并没有让我覆盖 npm 注册表。该项目在 package.json
所在的同一文件夹中包含一个 .npmrc
文件。这是 circle ci 会议的一部分:
- run:
name: "Set NPM registry"
command: npm config set registry https://npm.pkg.github.com/OWNER
- run:
name: "Authenticate with GitHub package registry"
command: echo "//npm.pkg.github.com/:_authToken=${GITHUB_PACKAGES}" > web_ui/frontend/.npmrc
- run:
name: "Install frontend dependencies"
command: npm run deps-frontend
GITHUB_PACKAGES
只是一个存储在 circleCI 中的环境变量。
现在错误消息告诉我以下内容:
npm ERR! code E401
npm ERR! Unable to authenticate, need: Basic realm="GitHub Package Registry"
我尝试用谷歌搜索它,但没有任何结果。
您可以尝试将 run
步移动到 pre
步吗?像这样:
pre:
- npm config set registry https://npm.pkg.github.com/OWNER
- echo "//npm.pkg.github.com/:_authToken=${GITHUB_PACKAGES}" > web_ui/frontend/.npmrc
- npm run deps-frontend
可以尝试的另一件事是使用不同版本的 npm
。
创建用于设置 .npmrc
值的命令,参见 orb 源 npm-config/set-registry
使用示例:
steps:
- checkout
- npm-config/set-registry:
registry-prurl: //your.registry.domain.net/path/
scope: '@your-scope'
auth-token: your-repo-token
- run:
name: Download depencies
command: yarn
来源:
set-registry:
description: Sets a registry to .npmrc
parameters:
registry-prurl:
description: |
protocol-relative URL (ex: //registry.domain.net/path/)
type: string
scope:
description: registry scope
type: string
auth-token:
description: authorization token for private repos
type: string
default: ""
steps:
- run:
name: Set NPM registry URL
command: >
scope=<< parameters.scope >>;
registry_prurl=<< parameters.registry-prurl >>;
npm config set "${scope}:registry" "https:$registry_prurl"
- run:
name: Set auth token for NPM registry if provided
command: |
if [ "<< parameters.auth-token >>" != "" ]; then
registry_prurl=<< parameters.registry-prurl >>;
auth_token=<< parameters.auth-token >>;
echo "${registry_prurl}:_authToken=${auth_token}" >> ~/.npmrc
fi;