Azure Devops:即使设置了NPM身份验证,也无法使用NPM专用注册表生成映像

时间:2018-09-13 15:49:25

标签: azure azure-devops devops

设置NPM身份验证后,我在npm安装上总是遇到错误。我想在映像构建期间向我的npm私有注册表进行身份验证,并安装所需的所有依赖项。也许我误解了此身份验证过程的工作原理,但这就是我正在做的事情:

构建管道

我尝试从Service connections for builds and releases的项目设置页面建立服务连接

之后,我还按照With a Task Runner (e.g. make gulp work)

中的步骤设置了NPM身份验证任务

但这不起作用。这些是我得到的错误:

“ NPM身份验证”阶段:

  

[warning]找到并取代了   所选.npmrc文件中的myregistry.pkgs.visualstudio.com注册表。   从文件中删除凭据并将其存储在npm服务中   而是连接(推荐),或删除npm Authenticate任务   从您的构建中使用签入.npmrc的凭据。

在“构建图像”阶段:

  

第4/7步:运行npm install --production --->在8724f713f1db中运行   [91mnpm错误!代码[0m [91m E404 [0m [91mnpm [0m [91mERR! 404 [0m [91m不是   找到:@ myregistry / service-logging @ latest npm ERR![0m [91m A完成   该运行的日志可在以下位置找到:npm ERR!
  /root/.npm/_logs/2018-09-11T04_20_00_513Z-debug.log [0m命令   '/ bin / sh -c npm install --production'返回非零代码:1   [错误]命令'/ bin / sh -c npm install --production'返回非零代码:1 [错误] / usr / local / bin / docker失败,返回   代码:1 [section]完成:建立图片

这是我的.npmrc文件:

unsafe-perm=true
package-lock=false
registry=https://myregistry.pkgs.visualstudio.com/_packaging/myregistry/npm/registry/
always-auth=true
//myregistry.pkgs.visualstudio.com/_packaging/myregistry/npm/registry/:_authToken=${NPM_TOKEN}
//myregistry.pkgs.visualstudio.com/_packaging/myregistry/npm/:_authToken=${NPM_TOKEN}

这是我的Dockerfile:

FROM node:8.9-alpine

ARG NPM_TOKEN

WORKDIR /usr/src/srv/

COPY package.json package.json

COPY .npmrc .npmrc

RUN npm install --production

RUN rm -f .npmrc

COPY . .

EXPOSE 8080

CMD npm start

我们将竭诚为您提供帮助,帮助我摆脱这一问题。谢谢!

1 个答案:

答案 0 :(得分:1)

我终于通过删除.npmrc文件中的最后两行解决了该问题。最后一行引起了问题。 NPM Authenticate任务完成后,我的.npmrc文件被修改为:

unsafe-perm=true
package-lock=false
registry=https://quasset.pkgs.visualstudio.com/_packaging/quasset/npm/registry/
always-auth=true

//myregistry.pkgs.visualstudio.com/_packaging/myregistry/npm/:_authToken=${NPM_TOKEN}

//quasset.pkgs.visualstudio.com/_packaging/myregistry/npm/registry/:username=VssToken
//myregistry.pkgs.visualstudio.com/_packaging/myregistry/npm/registry/:_password=***
//myregistry.pkgs.visualstudio.com/_packaging/myregistry/npm/registry/:email=VssEmail
//myregistry.pkgs.visualstudio.com/_packaging/myregistry/npm/registry/:always-auth=true

以某种方式,以下配置已被考虑,而NPM Authenticate插入的配置被忽略,从而导致管道错误:

//myregistry.pkgs.visualstudio.com/_packaging/myregistry/npm/:_authToken=${NPM_TOKEN}

此外,由于NPM Authenticate会为您完成这项工作,因此无需添加以下行:

//myregistry.pkgs.visualstudio.com/_packaging/myregistry/npm/registry/:_authToken=${NPM_TOKEN}

通过删除上面的行,此警告消失了:

  

[warning]找到并取代了   所选.npmrc文件中的myregistry.pkgs.visualstudio.com注册表。   从文件中删除凭据并将其存储在npm服务中   而是连接(推荐),或删除npm Authenticate任务   从您的构建中使用签入.npmrc的凭据。

因此,总而言之,只需保持.npmrc文件如此简单:

unsafe-perm=true
package-lock=false
registry=https://myregistry.pkgs.visualstudio.com/_packaging/myregistry/npm/registry/
always-auth=true

Dockerfile一切都很好。