#npm #azure-devops #azure-pipelines #npm-install #npm-publish
#npm #azure-devops #azure-конвейеры #npm-install #npm-опубликовать
Вопрос:
Я провожу проверку концепции для своей организации, используя конвейеры Azure DevOps для обработки наших интерфейсных сборок CI.
Я создал два проекта Angular: проект библиотеки и проект приложения, который использует эту библиотеку. У каждого из моих собственных проектов DevOps в моей организации, у каждого из которых есть свое собственное репозиторий. (например, код библиотеки Angular находится в репозитории проекта My-Org / My-Library, а приложение, которое использует эту библиотеку, находится в репозитории проекта My-Org / My-Application).Репозиторий.)
Я успешно заставил DevOps опубликовать пакет этой библиотеки в своих артефактах. Я успешно установил этот пакет из артефактов для своего приложения с помощью командной npm install
строки.
Когда я пытаюсь создать то же приложение с использованием конвейера Azure, все сначала выглядит хорошо, но затем я получаю предупреждения:
...
2020-09-25T01:40:22.9633584Z npm verb npm-session b9c6c5c07bc27d0f
2020-09-25T01:40:22.9634637Z npm info lifecycle @<myorganization>/<my-application-package-name>@0.0.0~preinstall: @<myorganization>/<my-application-package-name>@0.0.0
...
2020-09-25T01:40:22.9652940Z npm http fetch GET 200 https://registry.npmjs.org/ansi-colors/-/ansi-colors-4.1.1.tgz 888ms
2020-09-25T01:40:22.9653589Z npm http fetch GET 200 https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz 885ms
...
2020-09-25T01:40:22.9696448Z npm http fetch GET 200 https://registry.npmjs.org/tar/-/tar-6.0.5.tgz 256ms
2020-09-25T01:40:22.9697172Z npm WARN tar ENOENT: no such file or directory, open '/home/vsts/work/1/s/node_modules/.staging/source-map-655ef13e/dist/source-map.js'
2020-09-25T01:40:22.9697948Z npm http fetch GET 200 https://registry.npmjs.org/minizlib/-/minizlib-2.1.2.tgz 254ms
2020-09-25T01:40:22.9698728Z npm WARN tar ENOENT: no such file or directory, open '/home/vsts/work/1/s/node_modules/.staging/@angular/cli-095a8231/commands/build-impl.js'
2020-09-25T01:40:22.9699541Z npm WARN tar ENOENT: no such file or directory, open '/home/vsts/work/1/s/node_modules/.staging/engine.io-client-a00fe2c5/LICENSE'
...
Кульминацией стал несчастливый финал:
...
2020-09-25T01:40:23.9366311Z npm WARN tar ENOENT: no such file or directory, open '/home/vsts/work/1/s/node_modules/.staging/rxjs-77a83855/LICENSE.txt'
2020-09-25T01:40:23.9367111Z npm WARN tar ENOENT: no such file or directory, open '/home/vsts/work/1/s/node_modules/.staging/rxjs-77a83855/src/LICENSE.txt'
2020-09-25T01:40:23.9367879Z npm verb unlock done using /home/vsts/.npm/_locks/staging-b6ade8de5fa1f467.lock for /home/vsts/work/1/s/node_modules/.staging
2020-09-25T01:40:23.9369511Z npm verb stack Error: 404 Not Found - GET https://pkgs.dev.azure.com/<MyOrganization>/<My-Library-Project>/_packaging/<My-Library-Project-Artifact-Feed>/npm/registry/@<myorganization>/<my-library-package-name>/-/<my-library-package-name>-0.0.6.tgz
...
2020-09-25T01:40:23.9371625Z npm verb statusCode 404
2020-09-25T01:40:23.9372024Z npm verb pkgid @<myorganization>/<my-library-package-name>@0.0.6
2020-09-25T01:40:23.9372260Z npm verb cwd /home/vsts/work/1/s
2020-09-25T01:40:23.9372620Z npm verb Linux 5.4.0-1025-azure
2020-09-25T01:40:23.9373034Z npm verb argv "/opt/hostedtoolcache/node/12.18.4/x64/bin/node" "/opt/hostedtoolcache/node/12.18.4/x64/bin/npm" "install"
2020-09-25T01:40:23.9373392Z npm verb node v12.18.4
2020-09-25T01:40:23.9373573Z npm verb npm v6.14.6
2020-09-25T01:40:23.9373749Z npm ERR! code E404
2020-09-25T01:40:23.9374536Z npm ERR! 404 Not Found - GET https://pkgs.dev.azure.com/<MyOrganization>/<My-Library-Project>/_packaging/<My-Library-Project-Artifact-Feed>/npm/registry/@<myorganization>/<my-library-package-name>/-/<my-library-package-name>-0.0.6.tgz
2020-09-25T01:40:23.9375074Z npm ERR! 404
2020-09-25T01:40:23.9375516Z npm ERR! 404 '@<myorganization>/<my-library-package-name>@0.0.6' is not in the npm registry.
...
Но вот странная часть: если я нажму на этот URL-адрес в браузере, для которого конвейер сообщает 404— https://pkgs.dev.azure.com/<MyOrganization>/<My-Library-Project>/_packaging/<My-Library-Project-Artifact-Feed>/npm/registry/@<myorganization>/<my-library-package-name>/-/<my-library-package-name>-0.0.6.tgz
— браузер загружает мой пакет!
Итак, подведем итог:
- При выполнении
npm install
из командной строки для моего проекта приложения я могу установить пакет из артефактов DevOps библиотеки и - При нажатии на тот самый URL-адрес, о котором сообщается в журнале конвейера приложений, происходит сбой, браузер загружает пакет из артефактов библиотеки, но
- Конвейер приложения, который выполняется в моей организации DevOps, не может его найти.
Я подозреваю какие-то проблемы с разрешениями или авторизацией, но я не уверен, куда идти дальше.
Я попробовал npmAuthenticate@0
выполнить задачу, и действительно, в журналах говорится обнадеживающие вещи, такие как:
2020-09-25T01:40:04.2511306Z ##[debug]Got auth token
..
2020-09-25T01:40:04.2540281Z ##[debug]Created webApi client for https://dev.azure.com/<MyOrganization>/; options: {"proxy":null,"allowRetries":true,"maxRetries":5,"ignoreSslError":false}
2020-09-25T01:40:04.2581233Z ##[debug]Getting URI for area ID <some GUID> from https://dev.azure.com/<MyOrganization>/
2020-09-25T01:40:04.3973124Z ##[debug]Found resource area with locationUrl: https://pkgs.dev.azure.com/<MyOrganization>/
2020-09-25T01:40:04.3976465Z ##[debug]Found serviceUri: https://pkgs.dev.azure.com/<MyOrganization>/
2020-09-25T01:40:04.3978178Z ##[debug]Getting credentials for local feeds
2020-09-25T01:40:04.3978962Z SYSTEMVSSCONNECTION exists true
2020-09-25T01:40:04.3979926Z ##[debug]SYSTEMVSSCONNECTION exists true
2020-09-25T01:40:04.4003325Z ##[debug]Got auth token
2020-09-25T01:40:04.4004250Z ##[debug]Agent.ProxyUrl=undefined
2020-09-25T01:40:04.4005572Z ##[debug]Created webApi client for https://pkgs.dev.azure.com/<MyOrganization>/; options: {"proxy":null,"allowRetries":true,"maxRetries":5,"ignoreSslError":false}
2020-09-25T01:40:04.4007252Z ##[debug]Acquiring Packaging endpoints...
2020-09-25T01:40:04.6490830Z ##[debug]Successfully acquired the connection data
2020-09-25T01:40:04.6502681Z ##[debug]Acquired location
2020-09-25T01:40:04.6503915Z ##[debug]{"PackagingUris":["https://dev.azure.com/<MyOrganization>/","https://pkgs.dev.azure.com/<MyOrganization>/","https://pkgsprodcus1.pkgs.visualstudio.com/","https://pkgs.dev.azure.com/<MyOrganization>/","https://<myorganization>.pkgs.visualstudio.com/","https://pkgs.dev.azure.com/<MyOrganization>/"],"DefaultPackagingUri":"https://pkgs.dev.azure.com/<MyOrganization>/"}
Тем не менее, он по-прежнему терпит неудачу.
Любые предложения о том, что я могу попробовать?
Спасибо!!
PS Я должен добавить, что у меня есть гораздо больше информации, которой я могу поделиться, включая мой package.json, .npmrc и весь журнал, но я хотел сохранить это вкратце. Если вам нужно, чтобы я поделился дополнительной информацией, пожалуйста, дайте мне знать, и я добавлю их. Спасибо!
Ответ №1:
При подключении к каналу с частной областью проекта из конвейера Azure DevOps, который находится в той же организации, но в другом проекте, проект, к которому привязан канал, должен разрешать доступ к службе сборки другого проекта. Служба сборки также должна быть добавлена отдельно к разрешениям канала, независимо от области действия канала.
Это проблема с разрешениями на подачу в рамках проекта. Короче говоря, чтобы получить доступ к ленте с областью проекта, которая ограничена проектом, отличным от проекта, в котором выполняется конвейер, проект, в котором выполняется конвейер, должен иметь доступ КАК к проекту, к которому привязан канал, так и к самому каналу.
Вот как установить надлежащие разрешения.
-
Проверьте проект, в котором выполняется конвейер. Разрешение службы сборки, которое необходимо добавить к разрешению канала и разрешениям проекта канала, будет выглядеть примерно так
[Project name] Build Service ([Organization name])
. -
В проекте, к которому привязан канал, перейдите к настройкам разрешений, чтобы добавить службу сборки проекта конвейера (
[Project name] Build Service ([Organization name])
) в группу «Участники» или какую-либо другую группу, которая может быть в вашем проекте, которая разрешает доступ участников к своим пользователям. -
На странице разрешений канала добавьте, по
[Project name] Build Service ([Organization name])
крайней мере, доступ соавтора, чтобы пакеты можно было получать из вышестоящих источников. Если вы предоставляете только разрешения на чтение, пакеты не могут быть получены из вышестоящих источников.
Комментарии:
1. Ты холодный гений! Это устранило проблему.