Azure DevOps Services | Azure DevOps Server 2022 | Azure DevOps Server 2020
O Azure Artifacts permite que os desenvolvedores gerenciem seus pacotes de várias fontes, incluindo registros públicos como npmjs.com e feeds privados. Para autenticar com o Azure Artifacts, você precisará configurar o arquivo de configuração npm. Esse arquivo contém URLs de feed e credenciais usadas pelo npm, oferecendo opções para personalizar o comportamento do cliente npm, como configurar proxies, definir locais de pacote padrão ou configurar feeds de pacote privado. O arquivo npmrc normalmente está localizado no diretório inicial do usuário, mas também pode ser criado no nível do projeto para substituir as configurações padrão.
Pré-requisitos
Conectar-se ao feed
O Azure Artifacts recomenda o uso de dois arquivos de configuração separados. O primeiro é dedicado à autenticação com o Azure Artifacts, enquanto o segundo deve ser mantido localmente para armazenar suas credenciais. Essa abordagem permite que você compartilhe seu arquivo de configuração mantendo suas credenciais seguras.
Para configurar o segundo arquivo, coloque-o no diretório base no computador de desenvolvimento e inclua todas as suas credenciais do Registro. Isso permite que o cliente npm acesse facilmente suas credenciais para autenticação.
As etapas a seguir orientam você na configuração do primeiro arquivo de configuração. Selecione a guia que corresponde ao seu ambiente de desenvolvimento:
Nota
vsts-npm-auth
não tem suporte no Servidor do Azure DevOps.
Entre em sua organização do Azure DevOps e navegue até seu projeto.
Selecione Artefatos e Conectar para feed.
Selecione npm na barra lateral esquerda. Se esta for a primeira vez que você usa o Azure Artifacts com o npm, verifique se instalou os pré-requisitos.
Siga as instruções na seção Configuração do projeto para se conectar ao seu feed.
Adicione um arquivo .npmrc no diretório do projeto, no mesmo diretório do arquivo package.json e cole o snippet a seguir nele.
registry=https://pkgs.dev.azure.com/<ORGANIZATION_NAME>/<PROJECT_NAME>/_packaging/<FEED_NAME>/npm/registry/
always-auth=true
Credenciais de instalação
Copie o snippet a seguir e cole-o no arquivo npmrc no nível do usuário:
Feed da organização com escopo:
; begin auth token
//pkgs.dev.azure.com/<ORGANIZATION_NAME>/_packaging/<FEED_NAME>/npm/registry/:username=[ENTER_ANY_VALUE_BUT_NOT_AN_EMPTY_STRING]
//pkgs.dev.azure.com/<ORGANIZATION_NAME>/_packaging/<FEED_NAME>/npm/registry/:_password=[BASE64_ENCODED_PERSONAL_ACCESS_TOKEN]
//pkgs.dev.azure.com/<ORGANIZATION_NAME>/_packaging/<FEED_NAME>/npm/registry/:email=npm requires email to be set but doesn't use the value
//pkgs.dev.azure.com/<ORGANIZATION_NAME>/_packaging/<FEED_NAME>/npm/:username=[ANY_VALUE_BUT_NOT_AN_EMPTY_STRING]
//pkgs.dev.azure.com/<ORGANIZATION_NAME>/_packaging/<FEED_NAME>/npm/:_password=[BASE64_ENCODED_PERSONAL_ACCESS_TOKEN]
//pkgs.dev.azure.com/<ORGANIZATION_NAME>/_packaging/<FEED_NAME>/npm/:email=npm requires email to be set but doesn't use the value
; end auth token
Feed do projeto com escopo:
; begin auth token
//pkgs.dev.azure.com/<ORGANIZATION_NAME>/<PROJECT_NAME>/_packaging/<FEED_NAME>/npm/registry/:username=[ENTER_ANY_VALUE_BUT_NOT_AN_EMPTY_STRING]
//pkgs.dev.azure.com/<ORGANIZATION_NAME>/<PROJECT_NAME>/_packaging/<FEED_NAME>/npm/registry/:_password=[BASE64_ENCODED_PERSONAL_ACCESS_TOKEN]
//pkgs.dev.azure.com/<ORGANIZATION_NAME>/<PROJECT_NAME>/_packaging/<FEED_NAME>/npm/registry/:email=npm requires email to be set but doesn't use the value
//pkgs.dev.azure.com/<ORGANIZATION_NAME>/<PROJECT_NAME>/_packaging/<FEED_NAME>/npm/:username=[ENTER_ANY_VALUE_BUT_NOT_AN_EMPTY_STRING]
//pkgs.dev.azure.com/<ORGANIZATION_NAME>/<PROJECT_NAME>/_packaging/<FEED_NAME>/npm/:_password=[BASE64_ENCODED_PERSONAL_ACCESS_TOKEN]
//pkgs.dev.azure.com/<ORGANIZATION_NAME>/<PROJECT_NAME>/_packaging/<FEED_NAME>/npm/:email=npm requires email to be set but doesn't use the value
; end auth token
Gere um token de acesso pessoal com escopos de leitura e gravação de empacotamento.
Execute o comando a seguir em uma janela de prompt de comando e cole o token de acesso pessoal quando solicitado. Uma vez concluído, copie o valor codificado em Base 64 gerado.
node -e "require('readline') .createInterface({input:process.stdin,output:process.stdout,historySize:0}) .question('PAT> ',p => { b64=Buffer.from(p.trim()).toString('base64');console.log(b64);process.exit(); })"
Se você estiver no Linux/Mac, você poderá usar o comando a seguir para converter seu token de acesso pessoal na Base 64. Copie o valor codificado em Base64 resultante.
echo -n "YOUR_PERSONAL_ACCESS-TOKEN" | base64
Substitua os espaços reservados [BASE64_ENCODED_PERSONAL_ACCESS_TOKEN] em seu arquivo .npmrc de usuário pelo token de acesso pessoal codificado obtido da etapa anterior.
Entre em sua coleção do Azure DevOps e navegue até seu projeto.
Selecione Artefatos e Conectar para feed.
Selecione npm na barra lateral esquerda e siga as instruções na seção de configuração do projeto para configurar o arquivo de configuração.
Adicione um arquivo .npmrc no diretório do projeto, no mesmo diretório do arquivo package.json e cole o snippet a seguir nele.
registry=http://<SERVER_NAME>/<COLLECTION_NAME>/<PROJECT_NAME>/_packaging/<FEED_NAME>/npm/registry/
always-auth=true
Credenciais de instalação
Copie o snippet a seguir e cole-o no arquivo .npmrc no nível do usuário:
Feed no escopo da coleção:
; begin auth token
//<SERVER_NAME>/<COLLECTION_NAME>/_packaging/<FEED_NAME>/npm/registry/:username=DefaultCollection
//<SERVER_NAME>/<COLLECTION_NAME>/_packaging/<FEED_NAME>/npm/registry/:_password=[BASE64_ENCODED_PERSONAL_ACCESS_TOKEN]
//<SERVER_NAME>/<COLLECTION_NAME>/_packaging/<FEED_NAME>/npm/registry/:email=npm requires email to be set but doesn't use the value
//<SERVER_NAME>/<COLLECTION_NAME>/_packaging/<FEED_NAME>/npm/:username=DefaultCollection
//<SERVER_NAME>/<COLLECTION_NAME>/_packaging/<FEED_NAME>/npm/:_password=[BASE64_ENCODED_PERSONAL_ACCESS_TOKEN]
//<SERVER_NAME>/<COLLECTION_NAME>/_packaging/<FEED_NAME>/npm/:email=npm requires email to be set but doesn't use the value
; end auth token
Feed do projeto com escopo:
; begin auth token
//<SERVER_NAME>/<COLLECTION_NAME>/<PROJECT_NAME>/_packaging/<FEED_NAME>/npm/registry/:username=[ENTER_ANY_VALUE_BUT_NOT_AN_EMPTY_STRING]
//<SERVER_NAME>/<COLLECTION_NAME>/<PROJECT_NAME>/_packaging/<FEED_NAME>/npm/registry/:_password=[BASE64_ENCODED_PERSONAL_ACCESS_TOKEN]
//<SERVER_NAME>/<COLLECTION_NAME>/<PROJECT_NAME>/_packaging/<FEED_NAME>/npm/registry/:email=npm requires email to be set but doesn't use the value
//<SERVER_NAME>/<COLLECTION_NAME>/<PROJECT_NAME>/_packaging/<FEED_NAME>/npm/:username=[ENTER_ANY_VALUE_BUT_NOT_AN_EMPTY_STRING]
//<SERVER_NAME>/<COLLECTION_NAME>/<PROJECT_NAME>/_packaging/<FEED_NAME>/npm/:_password=[BASE64_ENCODED_PERSONAL_ACCESS_TOKEN]
//<SERVER_NAME>/<COLLECTION_NAME>/<PROJECT_NAME>/_packaging/<FEED_NAME>/npm/:email=npm requires email to be set but doesn't use the value
; end auth token
Gere um token de acesso pessoal com escopos de leitura e gravação de empacotamento.
Execute o comando a seguir em uma janela de prompt de comando e cole o token de acesso pessoal quando solicitado. Uma vez concluído, copie o valor codificado em Base 64 gerado.
node -e "require('readline') .createInterface({input:process.stdin,output:process.stdout,historySize:0}) .question('PAT> ',p => { b64=Buffer.from(p.trim()).toString('base64');console.log(b64);process.exit(); })"
Substitua os espaços reservados [BASE64_ENCODED_PERSONAL_ACCESS_TOKEN] em seu arquivo .npmrc de usuário pelo token de acesso pessoal codificado obtido da etapa anterior.
Entre em sua coleção do Azure DevOps e navegue até seu projeto.
Selecione Artefatos e selecione Conectar para feed.
Selecione npm à esquerda e siga as instruções em Configuração do projeto para configurar o arquivo de configuração.
Adicione um arquivo .npmrc no diretório do projeto, no mesmo diretório do arquivo package.json e cole o seguinte snippet nele:
registry=http://<SERVER_NAME>/<COLLECTION_NAME>/<PROJECT_NAME>/_packaging/<FEED_NAME>/npm/registry/
always-auth=true
Credenciais de instalação
Copie o snippet a seguir e cole-o no arquivo .npmrc no nível do usuário:
Feed no escopo da coleção:
; begin auth token
//<SERVER_NAME>/<COLLECTION_NAME>/_packaging/<FEED_NAME>/npm/registry/:username=DefaultCollection
//<SERVER_NAME>/<COLLECTION_NAME>/_packaging/<FEED_NAME>/npm/registry/:_password=[BASE64_ENCODED_PERSONAL_ACCESS_TOKEN]
//<SERVER_NAME>/<COLLECTION_NAME>/_packaging/<FEED_NAME>/npm/registry/:email=npm requires email to be set but doesn't use the value
//<SERVER_NAME>/<COLLECTION_NAME>/_packaging/<FEED_NAME>/npm/:username=DefaultCollection
//<SERVER_NAME>/<COLLECTION_NAME>/_packaging/<FEED_NAME>/npm/:_password=[BASE64_ENCODED_PERSONAL_ACCESS_TOKEN]
//<SERVER_NAME>/<COLLECTION_NAME>/_packaging/<FEED_NAME>/npm/:email=npm requires email to be set but doesn't use the value
; end auth token
Feed do projeto com escopo:
; begin auth token
//<SERVER_NAME>/<COLLECTION_NAME>/<PROJECT_NAME>/_packaging/<FEED_NAME>/npm/registry/:username=[ENTER_ANY_VALUE_BUT_NOT_AN_EMPTY_STRING]
//<SERVER_NAME>/<COLLECTION_NAME>/<PROJECT_NAME>/_packaging/<FEED_NAME>/npm/registry/:_password=[BASE64_ENCODED_PERSONAL_ACCESS_TOKEN]
//<SERVER_NAME>/<COLLECTION_NAME>/<PROJECT_NAME>/_packaging/<FEED_NAME>/npm/registry/:email=npm requires email to be set but doesn't use the value
//<SERVER_NAME>/<COLLECTION_NAME>/<PROJECT_NAME>/_packaging/<FEED_NAME>/npm/:username=[ENTER_ANY_VALUE_BUT_NOT_AN_EMPTY_STRING]
//<SERVER_NAME>/<COLLECTION_NAME>/<PROJECT_NAME>/_packaging/<FEED_NAME>/npm/:_password=[BASE64_ENCODED_PERSONAL_ACCESS_TOKEN]
//<SERVER_NAME>/<COLLECTION_NAME>/<PROJECT_NAME>/_packaging/<FEED_NAME>/npm/:email=npm requires email to be set but doesn't use the value
; end auth token
Gere um token de acesso pessoal com escopos de leitura e gravação de empacotamento.
Execute o comando a seguir em uma janela de prompt de comando e cole o token de acesso pessoal quando solicitado. Uma vez concluído, copie o valor codificado em Base 64 gerado.
node -e "require('readline') .createInterface({input:process.stdin,output:process.stdout,historySize:0}) .question('PAT> ',p => { b64=Buffer.from(p.trim()).toString('base64');console.log(b64);process.exit(); })"
Substitua os espaços reservados [BASE64_ENCODED_PERSONAL_ACCESS_TOKEN] em seu arquivo .npmrc de usuário pelo token de acesso pessoal codificado obtido da etapa anterior.
Solucionar problemas
vsts-npm-auth não é reconhecido
Esse erro indica que a pasta de módulos npm não foi adicionada ao seu caminho. Execute novamente a configuração do Node.js e selecione a opção Add to PATH
. Como alternativa, você pode adicionar a pasta de módulos npm ao caminho modificando a variável PATH para %APPDATA%\npm
no Prompt de Comando ou $env:APPDATA\npm
no PowerShell.
Não é possível autenticar
Redefinir vsts-npm-auth
Siga estas etapas para redefinir suas credenciais vsts-npm-auth:
Desinstalar vsts-npm-auth:
npm uninstall -g vsts-npm-auth
Limpe o cache do npm:
npm cache clean --force
Exclua seu arquivo .npmrc.
Reinstalar vsts-npm-auth:
npm install -g vsts-npm-auth --registry https://registry.npmjs.com --always-auth false
Não é possível publicar
Se você encontrar um erro 403, poderá indicar um conflito de nome. No Azure Artifacts, os pacotes são imutáveis, o que significa que, depois que você publica um pacote no feed, seu número de versão é permanentemente reservado. Mesmo que você o exclua, não será possível publicar um novo pacote com o mesmo número de versão. Para resolver esse problema, atualize a versão do pacote no arquivo package.json e tente novamente.
Conteúdo relacionado