Подключение проект npm в веб-каналы Артефактов Azure
Статья
Azure DevOps Services | Azure DevOps Server 2022 — Azure DevOps Server 2019
Артефакты Azure позволяют разработчикам публиковать и устанавливать различные типы пакетов из веб-каналов и общедоступных реестров, таких как npmjs.com. Чтобы выполнить проверку подлинности с помощью артефактов Azure, необходимо настроить файл конфигурации npm.
Этот файл содержит URL-адреса и учетные данные веб-канала, используемые npm, предлагая параметры настройки поведения клиента npm, такие как настройка прокси-серверов, определение расположений пакетов по умолчанию или настройка частных веб-каналов пакетов. NPMRC-файл обычно находится в домашнем каталоге пользователя, но также может быть создан на уровне проекта для переопределения параметров по умолчанию. Изменив NPMRC-файл, пользователи могут персонализировать свой интерфейс npm в соответствии с конкретными требованиями.
Необходимые компоненты
Организация Azure DevOps и проект. Создайте организацию или проект, если вы еще не сделали этого.
Для получения рекомендаций рекомендуется использовать два отдельных файла конфигурации. Первый используется для проверки подлинности с помощью артефактов Azure, а второй — локально и содержит учетные данные.
Чтобы настроить второй файл, просто поместите его в домашний каталог на компьютере разработки и включите все учетные данные реестра. Таким образом, клиент npm может легко получить доступ к учетным данным для проверки подлинности, что позволяет предоставить общий доступ к файлу конфигурации при сохранении безопасности учетных данных.
Ниже приведены инструкции по настройке первого файла конфигурации:
Примечание.
vsts-npm-auth не поддерживается в Azure DevOps Server.
Скопируйте следующий фрагмент кода в файл npmrc уровня пользователя:
Веб-канал область организации:
; 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
Веб-канал project-область d:
; 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
Скопируйте следующий фрагмент кода в NPMRC-файл на уровне пользователя:
Веб-канал область коллекции:
; 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
Веб-канал project-область d:
; 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
Скопируйте следующий фрагмент кода в NPMRC-файл на уровне пользователя:
Веб-канал область коллекции:
; 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
Веб-канал project-область d:
; 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
Замените оба значения [BASE64_ENCODED_PERSONAL_ACCESS_TOKEN] в файле npmrc пользователя личным маркером доступа на шаге 3.
Выберите коллекцию и перейдите к проекту.
Выберите артефакты и выберите Подключение для канала.
Откроется новое окно. В области навигации слева выберите npm.
Следуйте инструкциям по настройке проекта и npmrc-файлов .
Совет
Использование нескольких реестров в NPMRC-файлах поддерживается с область и источниками вышестоящий.
Проверка подлинности конвейера
Для проверки подлинности с помощью конвейера Azure Artifacts рекомендуется использовать задачу проверки подлинности npm.
При использовании средств выполнения задач, таких как gulp или Grunt, важно включить задачу проверки подлинности npm в начале конвейера. Это действие гарантирует, что учетные данные вставляются в NPMRC-файл проекта и сохраняются во время выполнения конвейера, что позволяет последующим шагам получить доступ к учетным данным в файле конфигурации.
Перейдите к проекту, выберите "Конвейеры" и выберите определение конвейера.
Нажмите кнопку "Изменить", чтобы изменить конвейер.
Выберите + , чтобы добавить новую задачу в конвейер.
Перейдите к проекту, выберите "Сборки конвейеров>" и выберите определение сборки.
Выберите "Изменить", чтобы изменить конвейер сборки.
Выберите + , чтобы добавить новую задачу в конвейер сборки.
Найдите задачу проверки подлинности npm и нажмите кнопку "Добавить".
Выберите NPMRC-файл, а затем нажмите кнопку "Сохранить и очередь" после завершения.
- task: npmAuthenticate@0
inputs:
workingFile: .npmrc ## Path to the npmrc file
customEndpoint: #Optional ## Comma-separated list of npm service connection names for registries from external organizations. For registries in your org, leave this blank
Примечание.
Для доступа к веб-каналу убедитесь, что роль службы сборки имеет значение Feed And Upstream Reader (Участник) в параметрах веб-канала.
Примечание.
Если ваша организация использует брандмауэр или прокси-сервер, убедитесь, что вы разрешаете соответствующие URL-адреса домена. Дополнительные сведения см. в разделе "Разрешенные IP-адреса" и URL-адреса домена.
Устранение неполадок
vsts-npm-auth не распознается
При возникновении следующей ошибки во время выполнения проекта:
Cmd: 'vsts-npm-auth' is not recognized as an internal or external command, operable program or batch file.
PowerShell: vsts-npm-auth : The term 'vsts-npm-auth' is not recognized as the name of a cmdlet, function, script file, or operable program.
Возможно, папка модулей npm не добавлена в путь. Чтобы устранить эту проблему, выполните повторную настройку Node.js и выберите Add to PATH этот параметр.
Кроме того, можно добавить папку модулей npm в путь, изменив переменную PATH в %APPDATA%\npm командной строке или $env:APPDATA\npm в PowerShell.
Не удается пройти проверку подлинности
Если вы работаете с ошибкой E401: code E401 npm ERR! Unable to authenticate Выполните команду с флагом vsts-npm-auth -F для повторной проверки подлинности.
vsts-npm-auth -config .npmrc -F
Сброс vsts-npm-auth
Выполните следующие действия, чтобы сбросить учетные данные vsts-npm-auth:
Ожидается в ближайшее время: в течение 2024 года мы постепенно откажемся от GitHub Issues как механизма обратной связи для контента и заменим его новой системой обратной связи. Дополнительные сведения см. в разделе https://aka.ms/ContentUserFeedback.