Когда я пытаюсь установить свои npm
модули из действия GitHub, я получаю следующую ошибку:
npm ERR! 401 Unauthorized - GET https://npm.pkg.github.com/@xxxx%2fxxxx-analytics - Your request could not be authenticated by the GitHub Packages service. Please ensure your access token is valid and has the appropriate scopes configured.
Прежде чем вы прокомментируете, я правильно настроил .npmrc с областью и токеном доступа, и все работает нормально при локальной установке частного пакета.
Вот мое действие рабочего процесса GitHub:
name: JavaScript workflow
on: [push]
jobs:
test:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v1
- name: Use Node.js 12.x
uses: actions/setup-node@v1
with:
node-version: '12.x'
- name: npmrc
run: cat .npmrc
- name: npm install
run: |
npm install
env:
CI: true
NPM_AUTH_TOKEN: ${{ secrets.NPM_AUTH_TOKEN }}
вот мой .npmrc
@fortawesome:registry=https://npm.fontawesome.com/
//npm.fontawesome.com/:_authToken=XXXXXXXXX
@colonynetworks:registry=https://npm.pkg.github.com
//npm.pkg.github.com:_authToken=XXXXXXXXX
always-auth=true
@react-admin:registry=https://registry.marmelab.com
//registry.marmelab.com:
_auth=XXXXXXXXX
[email protected]
always-auth=true
Это частное репо, и токены authTokens в настоящее время жестко запрограммированы в файле .npmrc.
Однако, пытаясь найти решение для этого, я наткнулся на этот случайный комментарий от сотрудника Github: https://github.community/t/netlify-getting-401-from-github-package-registry-with-auth-token/16415/3
Это немного расплывчато, но похоже, что он не принимает жестко запрограммированный authToken в файле .npmrc.
Итак, первое, что я попробовал, - это использовать нашу переменную env следующим образом:
@xxxx=https://npm.pkg.github.com
//npm.pkg.github.com:_authToken=${NPM_AUTH_TOKEN}
Переменная env верна в наших секретах репозитория Github и предоставляется рабочим процессом.
Однако это все равно привело к той же ошибке 401 Unauthorized.
Глядя на другие решения, я затем попытался сгенерировать .npmrc вручную внутри действия Github перед шагом install
, например:
- name: npmrcgen
run: |
echo "//npm.pkg.github.com/:_authToken=XXXXXXX" > .npmrc
echo "@xxxxx=https://npm.pkg.github.com/" >> .npmrc
echo "@react-admin:registry=https://registry.marmelab.com" >> .npmrc
echo "//registry.marmelab.com:" >> .npmrc
echo "_auth=XXXXXXX" >> .npmrc
echo "[email protected]" >> .npmrc
echo "always-auth=true" >> .npmrc
На этапе регистрации, который я добавил, _authToken (только для Github) по-прежнему отображается как ***
, и я все еще получаю ошибку 401 Unauthorized.
На этом этапе я хотел подтвердить, что .npmrc даже использовался, поэтому я удалил второй частный реестр, который мы использовали для marmelab.com
, и, конечно же, получил сообщение об ошибке, в котором говорилось, что он больше не может установить их пакет ra-realtime
. Это доказывает, что файл .npmrc действительно читается и используется моим действием Github, но он не принимает мой токен личного доступа Github.
Я также попытался сгенерировать новый токен. У него есть полный доступ ко всему, что находится под repo:
, а также под write:packages
и read:packages
, что и должно быть.
По-прежнему 401 Unauthorized в действии Github и все еще отлично работает локально.
Наконец, я попытался установить его с yarn
вместо npm
. Неудивительно, что это тоже не помогло.
Я безуспешно видел и пробовал следующие решения:
- Загрузить частный модуль из пакета Github Реестр через Yarn в действии Github? Публикация работает, но установка встречается с ошибкой 401 Unauthorized
- https://github.com/FerLuisxd/create-npmrc
- https://blog.bitsrc.io/install-npm-private-packages-in-ci-cd-with-github-actions-746db95017cc.
Одна вещь, которую я не пробовал, так как я не видел никаких рекомендаций о том, как это было бы хорошей идеей, но я не делал npm login
в действии Github. Поскольку никто другой этого не делал и каким-то образом это работает, я предполагаю, что в этом нет необходимости.