【问题标题】:Azure DevOps builds for Docker with npm installing from private feed have stopped working从私有源安装 npm 的 Docker Azure DevOps 构建已停止工作
【发布时间】:2019-11-06 09:55:06
【问题描述】:

我在 Azure DevOps 上为 React 应用程序构建了一些 Docker,其中包括来自私有 npm 源的包,这些包也托管在 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-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 月份的某个时候停止工作,而我没有进行任何更改。建议表示赞赏。

【问题讨论】:

  • 身份验证令牌已过期?
  • 就像我上面说的,“我认为我的令牌已经过期,所以我生成并存储了一个新的”。我现在实际上已经做过几次了。除非 DevOps 在生成新令牌时存在一些错误。我从 Connect to feed / npm / Generate credentials 对话框中获取它。
  • 现在token的格式已经改变了,会不会是因为将新格式的token放到.npmrc文件中不起作用?你可以考虑这个situation
  • 嗨。感谢您的评论。我实际上不确定发生了什么。我决定尝试我在本地存储在环境变量中并在 DevOps 中工作的那个。然后我尝试在 DevOps 中生成一个新的并使用它,它也有效。我注意到我存储在我的 DevOps 库中的那个要短得多,所以我的理论是,当我从 DevOps 复制生成的密钥时,它被添加到我的剪贴板并带有换行符,所以只有第一部分被粘贴到我所在的文本框中存储它。但这只是一个猜测,也许我只是愚蠢。无论哪种方式,它现在都可以工作了:/
  • 我遇到了完全相同的错误。事实证明,我试图在 linux docker 映像上运行 vsts-npm-auth。这仅适用于 Windows,可能适用于 WSL,但不适用于 linux。

标签: docker npm azure-devops


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 2022-01-10
    • 2018-08-16
    • 2019-04-19
    • 2020-01-11
    • 2019-05-28
    • 1970-01-01
    • 1970-01-01
    • 2021-02-22
    • 1970-01-01
    相关资源
    最近更新 更多