Auto: Auth não sendo escolhido corretamente no GitHub Action usando Artifactory e runners auto-hospedados

Criado em 19 mar. 2021  ·  14Comentários  ·  Fonte: intuit/auto

Descreva o bug

Estou tentando validar uma versão canário que está sendo executada em um runner auto-hospedado que extrai dependências de um registro npm privado do Artifactory e, em seguida, publica um pacote de volta para ele, tudo por meio de uma ação do GitHub que está em um runner auto-hospedado. Tudo parece estar funcionando corretamente, exceto a própria etapa de publicação, e estou vendo o seguinte:

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

Posteriormente, mais abaixo:

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

Não tenho necessariamente acesso ao ambiente de execução, já que ele é gerenciado por nossa equipe de operações, mas verifiquei o seguinte:

  • A ação é executada em /home/ubuntu/actions-runner/_work/fe-ui/fe-ui
  • O arquivo .npmrc parece estar atualizado com a entrada do token corretamente

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

  • O arquivo .npmrc que está sendo atualizado com o token acima reside dentro de /home/ubuntu/.npmrc

Reproduzir



Comportamento esperado

Capturas de tela

Informações ambientais:


Contexto adicional

Eu adoraria fornecer qualquer informação adicional, mas não tenho muito mais para contar. O que posso fazer para adicionar detalhes adicionais que podem ajudar a resolver isso?

bug

Todos 14 comentários

Parece que você está usando legacyAuth. Eu tentaria desligar isso primeiro

@hipstersmoothie quando você diz usando autenticação legada, você quer dizer _auth = [token] no arquivo .npmrc ? Em caso afirmativo, esse não é o caso, se não, o que exatamente você quer dizer e como eu desligaria isso?

Você provavelmente deve trabalhar para resolver isso com o seu cara devops.

Algumas dicas com base em nosso uso de artefatos:

  • Nós armazenamos um artifactory válido .npmrc em um env var que é injetado durante nossas compilações

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

  • Como estamos definindo o npmrc, você também precisa definir o npm plugin setRcToken para false

Notei que o comando canário em sua saída usa o sinalizador _auth , que só é usado se você tiver legacyAuth definido como verdadeiro em seu .autorc

Portanto, as etapas que você pode realizar localmente são:

  1. obter um npmrc trabalhando localmente que publique no artifactory
  2. copie-o para um env var
  3. injete esse env var durante uma construção em ~/.npmrc
  4. Certifique-se de definir setRcToken para false

@hipstersmoothie ah, você está correto, definimos legacyAuth como true porque sem ele (e agora estou tentando suas sugestões), estamos obtendo um 403 Forbidden de nossa instância artifactory. Eu apenas tentei definir o registro com o conjunto de tokens (como em minha postagem original, mas com o token real) no arquivo .npmrc e ainda vendo um 403. Eu entendo que isso é provavelmente uma limitação de nossa configuração de operações, mas apenas por curiosidade, o que está em seu npmrc? O nosso é o seguinte:

registry = https://artifactory.internal.livongo.com/artifactory/api/npm/npm-virtual
email = [email protected]
always-auth = true
save-exact = true

e então em package.json:

"publishConfig": {
  "registry": "https://artifactory.internal.livongo.com/artifactory/api/npm/npm-repository/"
},

Você notará que o final da URL é diferente para publicar vs instalar npm, o que meu entendimento foi necessário por meio do Artifactory para a camada de cache, mas definitivamente não sou um especialista no Artifactory em si. Só me lembro que essa foi a única maneira de fazer a autenticação funcionar corretamente (usando legacyAuth) quando estávamos publicando de nossas máquinas locais no Artifactory. Agora, estamos tentando bloquear a publicação local e descarregar isso para GitHub Actions, mas, por sorte, eu queria publicar um canário dessa mudança antes de remover legacyAuth de nossa configuração automática compartilhada e distribuí-lo para todos os nossos pacotes, mas Infelizmente, não posso porque agora não consigo publicar devido à falta de legacyAuth, lol.

Configuramos isso há muito tempo, mas tentarei comunicar os passos que tomamos:

Aqui estão nossos documentos internos para configurar o npmrc

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

Fora isso, provavelmente não vou ajudar muito. Artifactory pode ser meio difícil de se comportar

@hipstersmoothie Agradeço sua ajuda. Você está certo em termos de fazer o Artifactory se comportar, e é especialmente mais difícil se você não puder obter acesso para gerenciar a instância e precisar continuar indo e voltando com os devops para tentar as coisas.

de qualquer forma, agradeço sua ajuda e continuarei a trabalhar nisso. Eu já tentei imitar uma configuração semelhante à que você mostrou naquela captura de tela (e tentei novamente apenas para verificar depois de postá-la) e não funcionou para o meu caso de uso, provavelmente por causa de uma configuração no Artifactory que difere para nós. Se você não se importar, gostaria de manter esse problema aberto e voltarei e o fecharei se / quando resolvermos o problema. provavelmente acabarei examinando os detalhes internos do automóvel como parte desse processo.

Sim, estou bem com isso. Se você sugerir uma boa etapa de configuração do arteifactory, podemos adicioná-la aos documentos também

@hipstersmoothie Estou olhando para esta linha:

https://github.com/intuit/auto/blob/v10.21.3/plugins/npm/src/set-npm-token.ts#L37

Para minha máquina local (capaz de alcançar o artefato interno), quando isCi é false , posso publicar. Se eu mudar minha linha node_modules/@auto-it/npm/dist/set-npm-token.js referenciada acima para ser if (false) { , então obtenho o mesmo erro 403 que recebo quando isCi é true .

Ou é correto para não-ci ou correto para ci. Suspeito que setTokenOnCI não está considerando legacyAuth e deveria?

Parece que você pode ter perdido onde eu disse isso

Certifique-se de ter definido setRcToken como false

Todo esse código é ignorado se você tiver setRcToken definido como false

@hipstersmoothie que resposta muito boa e tudo está bem depois de setRcToken para false . Usar auto por meio de ações do github para nosso artefatório é um GO. Obrigado!

O problema pode ser fechado, erro do usuário / configuração, obrigado pelo suporte.

@hipstersmoothie Obrigado por ser paciente enquanto

Esta página foi útil?
0 / 5 - 0 avaliações