Github-Aktionen, 401 nicht autorisiert, wenn ein Github-Paket mit npm oder Garn installiert wird
Wenn ich versuche, meine npmModule über eine GitHub-Aktion zu installieren , wird folgende Fehlermeldung angezeigt:
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.
Bevor Sie einen Kommentar abgeben, habe ich die .npmrc mit dem Gültigkeitsbereich und dem Zugriffstoken richtig konfiguriert, und bei der lokalen Installation des privaten Pakets funktioniert alles einwandfrei.
Hier ist meine GitHub-Workflow-Aktion:
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 }}
Hier ist meine .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
Es ist ein privates Repo und die authTokens sind derzeit in der .npmrc-Datei fest codiert.
Als ich jedoch versuchte, eine Lösung dafür zu finden, stieß ich auf diesen zufälligen Kommentar eines Github-Mitarbeiters: https://github.community/t/netlify-getting-401-from-github-package-registry-with-auth-token/16415/3
Es ist ein bisschen vage, aber es klingt so, als würde es kein fest codiertes authToken in der .npmrc-Datei akzeptieren.
Als erstes habe ich versucht, stattdessen unsere env-Variable wie folgt zu verwenden:
@xxxx=https://npm.pkg.github.com
//npm.pkg.github.com:_authToken=${NPM_AUTH_TOKEN}
Die env-Variable ist in unseren Github-Repo-Geheimnissen korrekt und wird vom Workflow bereitgestellt.
Dies führte jedoch immer noch zu demselben 401 Unauthorized-Fehler.
Ausgehend von anderen Lösungen habe ich dann versucht, die .npmrc-Datei manuell in der Github-Aktion vor dem installSchritt zu generieren.
- 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
Während des Protokollierungsschritts, den ich hinzugefügt habe, wird das _authToken (nur für Github) immer noch als angezeigt ***, und ich habe immer noch den Fehler 401 Unauthorized.
Zu diesem Zeitpunkt wollte ich bestätigen, dass .npmrc überhaupt verwendet wurde, also entfernte ich die zweite private Registrierung, für die wir verwendet haben marmelab.com, und ich bekam eine Fehlermeldung, dass das ra-realtimePaket nicht mehr installiert werden konnte. Dies beweist, dass die .npmrc-Datei zwar von meiner Github-Aktion gelesen und verwendet wird, mein persönliches Github-Zugriffstoken jedoch nicht akzeptiert wird.
Ich habe auch versucht, ein neues Token zu generieren. Es hat vollen Zugriff auf alles unter repo:sowie write:packagesund read:packageswas ist erforderlich.
Immer noch 401 In der Github-Aktion nicht autorisiert und funktioniert lokal immer noch einwandfrei.
Zuletzt habe ich versucht, es mit yarnstatt zu installieren npm. Es ist nicht überraschend, dass dies auch nicht behoben wurde.
Ich habe die folgenden Lösungen ohne Erfolg gesehen und ausprobiert:
- Privates Modul aus der Github-Paketregistrierung über Garn innerhalb einer Github-Aktion herunterladen? Das Veröffentlichen funktioniert, aber die Installation wird mit '401 Unauthorized' erfüllt.
- https://github.com/FerLuisxd/create-npmrc
- https://blog.bitsrc.io/install-npm-private-packages-in-ci-cd-with-github-actions-746db95017cc
Eine Sache habe ich nicht ausprobiert, da ich keine Empfehlungen dazu gesehen habe, wie oder was eine gute Idee ist, aber ich habe keine npm logininnerhalb der Github-Aktion durchgeführt. Da dies noch niemand getan hat und es irgendwie funktioniert, gehe ich davon aus, dass dies nicht notwendig ist.
Antworten
Am Ende musste ich mich an den GitHub-Support wenden und ihnen Zugriff auf mein Repo gewähren, um dies herauszufinden.
Sie haben jedoch herausgefunden, wo das Problem lag.
Github-Workflows sind strenger als lokale Umgebungen und erfordern /vor dem Authentifizierungstoken ein zusätzliches :
Erkenne den Unterschied:
//npm.pkg.github.com:_authToken=XXXXXXXXX
//npm.pkg.github.com/:_authToken=XXXXXXXXX
Das Hinzufügen des Extra /vor :_authToken=löste das Problem für mich.