Décrivez le bogue
J'essaie de valider une version Canary qui s'exécute sur un programme d'exécution auto-hébergé qui extrait les dépendances d'un registre privé Artifactory npm, puis y publie un package, le tout via une action GitHub qui se trouve sur un coureur auto-hébergé. Tout semble fonctionner correctement, sauf l'étape de publication elle-même, et je vois ce qui suit :
Par la suite, plus bas :
Je n'ai pas nécessairement accès à l'environnement runner car il est géré par notre équipe opérationnelle mais j'ai vérifié ce qui suit :
/home/ubuntu/actions-runner/_work/fe-ui/fe-ui
.npmrc
semble être mis à jour avec l'entrée du jeton correctement//artifactory.internal.livongo.com/artifactory/api/npm/npm-repository/:_authToken=${NPM_TOKEN}
.npmrc
qui est mis à jour avec le jeton ci-dessus se trouve à l'intérieur de /home/ubuntu/.npmrc
Reproduire
Comportement prévisible
Captures d'écran
Informations environnementales :
Contexte supplémentaire
J'aimerais fournir des informations supplémentaires, mais je n'ai pas grand-chose d'autre à dire. Que puis-je faire pour ajouter des détails supplémentaires qui peuvent aider à résoudre ce problème ?
On dirait que vous utilisez legacyAuth. J'essaierais de désactiver ça d'abord
@hipstersmoothie quand vous dites utiliser l'authentification héritée, voulez-vous dire _auth = [token]
dans le fichier .npmrc
? Si oui, ce n'est pas le cas, sinon, que voulez-vous dire exactement et comment puis-je désactiver cela?
Vous devriez probablement travailler pour résoudre ce problème avec votre gars devops.
Quelques conseils basés sur notre utilisation des artefacts :
npm
plugin setRcToken
sur false
J'avais remarqué que la commande canary dans votre sortie utilise le drapeau _auth
, qui n'est utilisé que si vous avez legacyAuth
défini sur true dans votre .autorc
Les mesures que vous pouvez prendre localement sont donc :
~/.npmrc
setRcToken
sur false
@hipstersmoothie ah, vous avez raison, nous avons défini legacyAuth sur true car sans cela (et maintenant que j'essaie vos suggestions), nous obtenons un 403 Forbidden de notre instance d'artefact. Je viens d'essayer de configurer le registre avec le jeu de jetons (comme dans mon message d'origine mais avec le jeton réel) dans le fichier .npmrc
et je vois toujours un 403. Je comprends qu'il s'agit probablement d'une limitation de notre configuration d'opérations, mais juste par curiosité, qu'y a-t-il dans votre npmrc? Le nôtre est le suivant :
registry = https://artifactory.internal.livongo.com/artifactory/api/npm/npm-virtual
email = [email protected]
always-auth = true
save-exact = true
puis dans package.json :
"publishConfig": {
"registry": "https://artifactory.internal.livongo.com/artifactory/api/npm/npm-repository/"
},
Vous remarquerez que la fin de l'URL est différente pour les installations de publication et de npm, ce qui, à ma connaissance, était nécessaire via Artifactory pour la couche de mise en cache, mais je ne suis certainement pas un expert sur Artifactory lui-même. Je me souviens juste que c'était la seule façon dont nous pouvions faire fonctionner correctement l'authentification (en utilisant legacyAuth) lorsque nous publiions depuis nos machines locales vers Artifactory. Maintenant, nous essayons de bloquer la publication locale et de la décharger sur GitHub Actions mais, par chance, je voulais publier un canari de ce changement avant de supprimer legacyAuth de notre configuration automatique partagée et de le distribuer à tous nos packages mais hélas, je ne peux pas parce que je ne peux plus publier en raison de l'absence de legacyAuth, lol.
Nous l'avons mis en place une fois il y a longtemps, mais je vais essayer de communiquer les étapes que nous prenons :
Voici nos documents internes pour configurer le npmrc
A part ça, je ne vais probablement pas être d'une grande aide. Artifactory peut être un peu difficile à maîtriser
@hipstersmoothie J'apprécie votre aide. Vous avez tout à fait raison de faire en sorte qu'Artifactory se comporte, et c'est particulièrement plus difficile si vous ne pouvez pas accéder pour gérer l'instance et devez continuer à faire des allers-retours avec les devops pour essayer des choses.
Quoi qu'il en soit, j'apprécie votre aide et je continuerai de m'y intéresser. j'avais déjà essayé d'imiter une configuration similaire à ce que vous avez montré dans cette capture d'écran (puis réessayé juste pour vérifier après l'avoir posté) et cela n'a pas fonctionné pour mon cas d'utilisation, probablement à cause d'un paramètre dans Artifactory qui diffère pour nous. Si cela ne vous dérange pas, j'aimerais garder ce problème ouvert et je reviendrai le fermer si/quand nous aurons résolu le problème. Je vais probablement finir par parcourir les internes de l'automobile dans le cadre de ce processus.
Ouais ça me va. Si vous proposez une bonne étape de configuration des artefacts, nous pouvons également l'ajouter à la documentation
@hipstersmoothie Je regarde cette ligne :
https://github.com/intuit/auto/blob/v10.21.3/plugins/npm/src/set-npm-token.ts#L37
Pour ma machine locale (capable d'atteindre l'artefact interne), lorsque isCi
vaut false
, je peux publier. Si je change ma ligne locale node_modules/@auto-it/npm/dist/set-npm-token.js
référencée ci-dessus en if (false) {
, alors j'obtiens la même erreur 403 que lorsque isCi
est true
.
Soit c'est correct pour non-ci, soit correct pour ci. Je soupçonne que le setTokenOnCI
n'envisage pas legacyAuth
et il devrait le faire ?
On dirait que vous avez peut-être manqué où j'ai dit cela
Assurez-vous d'avoir défini setRcToken sur false
Tout ce code est ignoré si vous avez défini setRcToken
sur false
@hipstersmoothie quelle très belle réponse et tout va bien une fois que nous avons défini setRcToken
à false
. L'utilisation de auto
via des actions github vers notre artefact est un GO. Merci!
Le problème peut être fermé, erreur d'utilisateur/configuration, merci pour l'assistance.
@hipstersmoothie Merci d'avoir été patient pendant que nous avons compris cela.