从私有源安装npm的针对Docker的Azure DevOps构建已停止工作

1bqhqjot  于 2023-03-01  发布在  Docker
关注(0)|答案(3)|浏览(93)

我在Azure DevOps上为React应用构建了一些Docker,其中包括来自私有npm feed的包,该feed也托管在Azure DevOps上。最近,构建在npm install命令下开始失败。
为了验证从私有源安装的容器,我一直使用.npmrc文件,它在本地保存为.npmrc.docker,如下所示:

@<package-scope>:registry=https://<devops-username>.pkgs.visualstudio.com/_packaging/<feed-name>/npm/registry/
//<devops-username>.pkgs.visualstudio.com/_packaging/<feed-name>/npm/registry/:username=<feed-name>
//<devops-username>.pkgs.visualstudio.com/_packaging/<feed-name>/npm/registry/:_password=${NPM_TOKEN}
//<devops-username>.pkgs.visualstudio.com/_packaging/<feed-name>/npm/registry/:email=npm requires email to be set but doesn't use the value
//<devops-username>.pkgs.visualstudio.com/_packaging/<feed-name>/npm/:username=<feed-name>
//<devops-username>.pkgs.visualstudio.com/_packaging/<feed-name>/npm/:_password=${NPM_TOKEN}
//<devops-username>.pkgs.visualstudio.com/_packaging/<feed-name>/npm/:email=npm requires email to be set but doesn't use the value

我在顶部定义了一个限定范围的包源代码,其余部分通过Azure DevOps的 Connect to feed 向导生成。${NPM_TOKEN}是我的feed密码,我将其作为构建参数传递到docker build命令中。
我的Dockerfile使用这个的部分看起来像这样:

FROM node:alpine as build
ARG NPM_TOKEN
COPY ./.npmrc.docker /app/.npmrc
COPY ./package.json /app/package.json
WORKDIR /app
RUN npm install
RUN rm -f .npmrc

在我的Azure DevOps构建管道中,这一点一直很有效。管道的 Build image 部分从如下变量中提供此构建参数---build-arg NPM_TOKEN=$(ArtifactsNpmPat)-其中ArtifactsNpmPat是我的库中的变量。
最近我的构建开始失败。最初我认为我的令牌已经过期,所以我生成并存储了一个新的令牌。以下是来自代理的错误:
[错误]命令“/bin/sh -c npm install”返回了一个非零代码:1
[错误]进程“/usr/bin/docker”失败,退出代码为1
请注意,相同的进程继续在本地工作。所以我不知道如何诊断这个问题。我确实找到了this SO post,这导致我更新了我的Dockerfile,看起来像这样:

FROM node:alpine as build
ARG NPM_TOKEN
COPY ./.npmrc.docker /app/.npmrc
COPY ./package.json /app/package.json
WORKDIR /app
RUN npm install -g vsts-npm-auth
RUN vsts-npm-auth -config .npmrc
RUN npm install
RUN rm -f .npmrc

但是,docker build现在会从RUN vsts-npm-auth命令中生成一个非常疯狂的错误。

/usr/local/bin/vsts-npm-auth: line 1: MZ�╚╝���@���: not found
/usr/local/bin/vsts-npm-auth: line 1: �ԞO���: not found
/usr/local/bin/vsts-npm-auth: line 57: ╔╚��║[�
                                              ╔0�
&� �@ ╗╝═�╗��╔╚.rsrc�@@.reloc
                             �╗�@�H╗║�?�Y
                                         ╗*═d��╚���╗(&
╗╚s'
}║╝╗╗╚═}═╝*╗{═╝*0╗4╔╗╚(      ═╔╗╚(
═╔╚╚(
     ═╔╗╚(
          ═╔╗╚(
+═*0╔╗╚/(═
+═*0╝M╗╗{║╝o(

═()
�╔
  ,+╚═o*
�╔     ,s+
z═o,
Xo-
╝+║╚╝+╝*0╔╗╚?(═
+═*0╔╗╚#(═
+═*0A╚╚r╔po.
-╗{║╝o/
r╔p(0
+╔
═,║╚
    +╗╚/(═
          +*0╝�╝╗╚╝║(═
═�╔    ,&═╝╝,r║p╝�S╔╚(1
s2
z╚║+Z╚═o3

╚╚o,
═X(4
o5

╝-╚+║rgp║-╗(6
%-═&rgp+║rgp╝-rgp+(7
║+║*0╗║║-  ╚╝o8
+╚╝o9

+═*0╚L╗(&
╗╚}
╝╗║}╝╗═}╝╗╗(═}╝*╝═
╗{╝o:

╗(╗{
    ╝s;
╗(═o
╝+#╝o
║╗     ║(═══�╚,╗
╝o
╝╝o
0�s<╔╗30c

╗{╝ripo=

�╚,E(>
r�p�╔%rip�%�(?
�S╔%;�o@
═       sA
oB
═╚╗{╝sC
oB
═sD
╝+╝*0║╗{╝-rp╔p+║r�╔p
╝═╗{╝oE

+*0╗# ╗{
╝%-
   &╗{╝(═: not found
/usr/local/bin/vsts-npm-auth: line 58: syntax error: unexpected word (expecting ")")

所以我被卡住了。DevOps在使用其私有提要进行身份验证方面有什么变化吗?我不知道,但正如我所说,这些构建在10月份的某个时候停止工作,我没有做任何改变。

w7t8yxp5

w7t8yxp51#

您正在尝试运行与Linux平台不兼容的vsts-npm-auth,文档中的azure docs说明您只需要带有凭据的.npmrc文件

2ledvvac

2ledvvac2#

正如dawid debinski所回答的,vsts-npm-auth并不像here所写的那样在Linux平台上运行。
查看这个文档,其中您必须使用npm authenticate验证您的管道,或者使用YAML版本。

xoshrz7s

xoshrz7s3#

你可以通过以下步骤在Docker中向私有Azure DevOps源进行身份验证:
1.在Azure管道中,将System.AccessToken变量作为参数传递给Docker构建任务:

--build-arg NPM_TOKEN=$(System.AccessToken)

1.在.npmrc文件中追加一行,以使用NPM_TOKEN参数验证您的私有提要:

ARG NPM_TOKEN

printf "\n//pkgs.dev.azure.com/{org}/{project}/_packaging/{feed}/npm/registry/:_authToken=\${NPM_TOKEN} >> ./npmrc

相关问题