Azure DevOps Services | Azure DevOps Server 2022 — Azure DevOps Server 2019
Артефакты Azure позволяют разработчикам управлять своими пакетами из различных источников, включая общедоступные реестры, такие как npmjs.com и частные веб-каналы. Чтобы выполнить проверку подлинности с помощью артефактов Azure, необходимо настроить файл конфигурации npm. Этот файл содержит URL-адреса и учетные данные веб-канала, используемые npm, предлагая параметры настройки поведения клиента npm, такие как настройка прокси-серверов, определение расположений пакетов по умолчанию или настройка частных веб-каналов пакетов. NPMRC-файл обычно находится в домашнем каталоге пользователя, но также может быть создан на уровне проекта для переопределения параметров по умолчанию.
Azure Artifacts рекомендует использовать два отдельных файла конфигурации. Первый предназначен для проверки подлинности с помощью артефактов 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
Веб-канал с областью действия проекта:
; 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
Создайте личный маркер доступа с упаковками областей чтения и записи .
Выполните следующую команду в окне командной строки и вставьте личный маркер доступа при появлении запроса. После этого скопируйте созданное значение в кодировке Base 64.
Если вы используете Linux или Mac, можно также использовать следующую команду для преобразования личного маркера доступа в Base 64. Скопируйте полученное значение в кодировке Base64.
echo -n "YOUR_PERSONAL_ACCESS-TOKEN" | base64
Замените заполнители [BASE64_ENCODED_PERSONAL_ACCESS_TOKEN] в файле NPMRC пользователя на закодированный личный маркер доступа, полученный на предыдущем шаге.
Скопируйте следующий фрагмент кода и вставьте его в 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
Веб-канал с областью действия проекта:
; 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
Создайте личный маркер доступа с упаковками областей чтения и записи .
Выполните следующую команду в окне командной строки и вставьте личный маркер доступа при появлении запроса. После этого скопируйте созданное значение в кодировке Base 64.
Скопируйте следующий фрагмент кода и вставьте его в 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
Веб-канал с областью действия проекта:
; 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
Создайте личный маркер доступа с упаковками областей чтения и записи .
Выполните следующую команду в окне командной строки и вставьте личный маркер доступа при появлении запроса. После этого скопируйте созданное значение в кодировке Base 64.
Для проверки подлинности с помощью конвейера 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 не распознается
Эта ошибка означает, что папка модулей npm не добавлена в путь. Повторно запустите программу установки Node.js и выберите Add to PATH этот параметр. Кроме того, можно добавить папку модулей npm в путь, изменив переменную PATH в %APPDATA%\npm командной строке или $env:APPDATA\npm в PowerShell.
Не удается пройти проверку подлинности
Ошибка: код E401 npm ERR! Не удается выполнить проверку подлинности: выполните команду с флагом vsts-npm-auth -F для повторной проверки подлинности:>
vsts-npm-auth -config .npmrc -F
Сброс vsts-npm-auth
Выполните следующие действия, чтобы сбросить учетные данные vsts-npm-auth:
Если возникла ошибка 403, это может указывать на конфликт имен. В Azure Artifacts пакеты неизменяемы, что означает, что после публикации пакета в веб-канале его номер версии постоянно зарезервирован. Даже если удалить его, вы не можете опубликовать новый пакет с тем же номером версии. Чтобы устранить эту проблему, обновите версию пакета в файле package.json и повторите попытку.