публикация npm не работает на AWS CodeArtifact

#node.js #amazon-web-services #npm #npm-publish #aws-codeartifact

#node.js #amazon-веб-сервисы #нпм #npm-опубликовать #aws-codeartifact

Вопрос:

Я пытаюсь использовать npm publish для публикации библиотеки javascript в частном репозитории NPM, размещенном на AWS Codeartifact.

Когда я пытаюсь запустить npm publish на своем локальном компьютере, он работает без каких-либо проблем. Однако, когда я пытаюсь запустить его на Jenkins, похоже, что пакет пытается быть опубликован в репозитории пакетов NPM вместо AWS codeartifact, и я получаю следующую ошибку:

  > @company/package@0.2.2 prepare .
 > npm run co:login
 
 
 > @company/package@0.2.2 co:login /usr/src/components
 > aws codeartifact login --tool npm --domain <DOMAIN> --repository <REPOSITORY>
 
 Successfully configured npm to use AWS CodeArtifact repository <AWS_CODEARTIFACT_URL>
 Login expires in 12 hours at 2020-12-08 11:15:37 00:00
 npm notice 
 npm notice package: @company/package@0.2.2
 npm notice === Tarball Contents === 
 npm notice 2.9kB package.json   
 npm notice 1.6kB README.md      
 npm notice 268B  dist/index.d.ts
 npm notice === Tarball Details === 
 npm notice name:          @company/package              
 npm notice version:       0.2.2                                   
 npm notice package size:  2.1 kB                                  
 npm notice unpacked size: 4.8 kB                                  
 npm notice shasum:        <SHASUM>
 npm notice integrity:     <INTEGRITY>
 npm notice total files:   3                                       
 npm notice 
 npm ERR! code E404
 npm ERR! 404 Not Found - PUT https://registry.npmjs.org/@company/package - Not found
 npm ERR! 404 
 npm ERR! 404  '@company/package@0.2.3' is not in the npm registry.
 npm ERR! 404 You should bug the author to publish it (or use the name yourself!)
 npm ERR! 404 
 npm ERR! 404 Note that you can also install from a
 npm ERR! 404 tarball, folder, http url, or git url.
 
 npm ERR! A complete log of this run can be found in:
 npm ERR!     /root/.npm/_logs/2020-12-08T00_20_19_949Z-debug.log
 

Если я понимаю документацию AWS codeartifact, она должна устанавливать правильные настройки .npmrc при запуске aws codeartifact login command. Я все еще не понимаю, почему он пытается перейти в реестр npm вместо AWS.

Вот мой package.json:

 {
  "name": "@company/package",
  "version": <VERSION>,
  "main": "dist/index.js",
  "module": "dist/index.js",
  "types": "dist/index.d.ts",
  "files": [
    "dist"
  ],
  "dependencies": {...},
  "scripts": {
    "co:login": "aws codeartifact login --tool npm --domain <DOMAIN> --repository <REPOSITORY>",
    "prepare": "npm run co:login"
  },
  "eslintConfig": {...},
  "browserslist": {...},
  "peerDependencies": {...},
  "devDependencies": {...}
}

 

Обновить

Я добавил ссылку на свой CodeArtificat с помощью

 npm set registry <LINK_TO_CODE_ARTIFACT>
 

Когда я выполняю сценарий публикации локально, я получаю эту ошибку при первом запуске скрипта:

 Unable to authenticate, need: Bearer realm="company/package", Basic realm="company/package"
 

Эта ошибка исчезает при последующих запусках. Однако, когда я пытаюсь сделать то же самое на своем конвейере Jenkins, я продолжаю получать эту ошибку. Не уверен, что это значит. Я видел поток, связанный с этой ошибкой в Azure, но не могу ничего найти в AWS CodeArtifact.

Ответ №1:

Проблема заключалась в том, что я использовал два разных менеджера пакетов yarn и npm выполнял несколько задач в этом проекте. Код был собран с использованием yarn , но публикация повторялась npm . Чтобы быть единообразным, то есть использовать yarn во всех наших задачах, я попробовал yarn publish , и это волшебным образом сработало.

Мораль этой истории: будьте последовательны со своими менеджерами пакетов.

Ответ №2:

У меня была очень похожая проблема с использованием CodeBuild и CodeArtifact для публикации пакетов npm.

Рекомендуемый подход с использованием prepare шага с aws codeartifact login помощью команды не сработал для меня. Я думаю, что это может быть связано с какой-то проблемой Ubuntu и npm не позволяет получить фактический доступ к .npmrc файлу, в который login записывается команда.

В конце я добавил следующие дополнительные команды оболочки в свой скрипт, прежде npm publish чем использовать рекомендации от https://docs.aws.amazon.com/codeartifact/latest/ug/npm-auth.html :

   npm set registry https://<endpoint name>.d.codeartifact.eu-west-2.amazonaws.com/npm/<repo name>/
  npm config set //<endpoint name>.d.codeartifact.eu-west-2.amazonaws.com/npm/<repo name>/:always-auth=true
  npm config set //<endpoint name>.d.codeartifact.eu-west-2.amazonaws.com/npm/<repo name>/:_authToken=$(aws codeartifact get-authorization-token --domain <domain> | jq -r .authorizationToken)
  npm publish --unsafe-perm

 

Обратите внимание, что имя конечной точки и доменное имя будут зависеть от ваших собственных настроек.

Также обратите внимание, что я использовал jq для извлечения токена аутентификации — он входит в стандартную комплектацию сервера CodeBuild.

Обратите внимание, что также этот пример находится в eu-west-2 , но может быть в любом регионе, если вы его измените.