我在基于Azure DevOps的React应用程序上有一些Docker构建,其中包括来自私有npm 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}
是我的供稿密码,我将其作为构建参数传递给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
是我的库中的变量,向该构建arg提供信息。
最近我的构建开始失败。最初,我假设我的令牌已过期,所以我生成并存储了一个新令牌。这是来自代理的错误:
[错误]命令'/ 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月份的某个时候就停止了工作,而我没有进行任何更改。建议表示赞赏。