Auto: L'authentification n'est pas récupérée correctement dans GitHub Action en utilisant Artifactory et les coureurs auto-hébergés

Créé le 19 mars 2021  ·  14Commentaires  ·  Source: intuit/auto

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 :

Screen Shot 2021-03-19 at 10 11 08 AM

Par la suite, plus bas :

Screen Shot 2021-03-19 at 10 11 53 AM

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 :

  • L'action se déroule dans /home/ubuntu/actions-runner/_work/fe-ui/fe-ui
  • Le fichier .npmrc semble être mis à jour avec l'entrée du jeton correctement

    • //artifactory.internal.livongo.com/artifactory/api/npm/npm-repository/:_authToken=${NPM_TOKEN}

  • Le fichier .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 ?

bug

Tous les 14 commentaires

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 :

  • Nous stockons un artefact .npmrc valide dans une variable d'environnement qui est injectée lors de nos builds

Screen Shot 2021-03-19 at 11 32 06 AM

  • Puisque nous définissons nous-mêmes le npmrc, vous devez également définir le 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 :

  1. obtenir un npmrc fonctionnant localement qui publie sur artefactory
  2. copiez-le dans une var env
  3. injecter cette env var lors d'une construction dans ~/.npmrc
  4. Assurez-vous d'avoir défini 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

Screen Shot 2021-03-19 at 12 01 36 PM

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.

Cette page vous a été utile?
0 / 5 - 0 notes