我在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月份的某个时候停止工作,我没有做任何改变。
3条答案
按热度按时间w7t8yxp51#
您正在尝试运行与Linux平台不兼容的vsts-npm-auth,文档中的azure docs说明您只需要带有凭据的.npmrc文件
2ledvvac2#
正如dawid debinski所回答的,vsts-npm-auth并不像here所写的那样在Linux平台上运行。
查看这个文档,其中您必须使用npm authenticate验证您的管道,或者使用YAML版本。
xoshrz7s3#
你可以通过以下步骤在Docker中向私有Azure DevOps源进行身份验证:
1.在Azure管道中,将
System.AccessToken
变量作为参数传递给Docker构建任务:1.在
.npmrc
文件中追加一行,以使用NPM_TOKEN
参数验证您的私有提要: