Npm 身份验证仅偶尔在 Azure DevOps 管道中工作

问题描述 投票:0回答:1

我有一个非常奇怪的问题,我似乎无法理解......

我们在 Azure Artifacts 中使用私有注册表来分发私有 npm 包。我的 Azure Pipeline 正在使用 npmAuthenticate 任务来针对此源进行身份验证。 feed 信息放置在项目的 .npmrc 文件中。 提要权限显示该项目作为贡献者角色:

User/Group: [ProjectName]\Contributor - Role: Contributor

随机构建在

npm ci
步骤失败,并显示以下错误消息:

#17 132.8 npm ERR! code E401
#17 132.8 npm ERR! Incorrect or missing password.

通过诊断输出,我看到不同包的错误。然而,在管道运行中,出现 401 错误的包有所不同。此外,并非所有软件包都会受到影响。大多数都可以正常加载。

#17 55.03 npm http fetch GET 401 https://***/***/_packaging/***/npm/registry/resolve-from/-/resolve-from-4.0.0.tgz 50860ms attempt #2 (cache skip)

我们最近改变了什么

  • 我们从 Node 16.14.0 升级到 20.12.1,包括 npm 10.5.0

我已经尝试过的

  • 我将自己的令牌放入项目的 .npmrc 文件中。
  • 已验证它在同一构建代理上失败和成功。
  • 我尝试使用以前的节点版本(16.14.0)运行,其中 npm ci 成功。
  • 我尝试使用节点 18.20 得到相同的结果
  • 我在网上搜索了有关 Node 版本 18 和 20 在这方面存在问题的任何已知信息,但没有结果。
  • 显然它正在与 Node
    18.18
    一起工作,但不在上面。

管道和 Docker 文件摘录

管道:

[...]
      - task: npmAuthenticate@0
        inputs:
          workingFile: .npmrc
        displayName: 'NPM Auth'

      - bash: |
          docker build -f ./deployment/ci.Dockerfile -t $(projectName):$(Build.SourceVersion) .
        displayName: 'CI build docker image'
[...]

ci.Dockerfile:

FROM node:20.12 AS builder

RUN apt-get update && \
    apt-get install -y chromium && \
    wget https://binaries.sonarsource.com/Distribution/sonar-scanner-cli/sonar-scanner-cli-5.0.1.3006-linux.zip  -O ~/sonar.zip && \
    unzip ~/sonar.zip -d /opt/sonar && \
    rm ~/sonar.zip
ENV CHROME_BIN=/usr/bin/chromium PATH="/opt/sonar/sonar-scanner-5.0.1.3006-linux/bin:${PATH}"

WORKDIR /build

COPY package.json /build
COPY package-lock.json /build
COPY .npmrc /build
COPY sonar.properties /build

RUN npm -d ci # <-- It fails here. Usually run without -d.

COPY . /build

RUN npm run build:ci
[...]

node.js docker npm azure-devops
1个回答
0
投票

我尝试了你的任务,并且使用相同的 Dockerfile,它始终在我这边工作。当使用相同的源代码和相同的代理时,您的管道会间歇性失败。我的管道和你的管道的区别是两个包json内容和代理,请:

  1. 尝试使用之前建议的 Microsoft 托管代理,看看是否有帮助。
  2. 检查两个json的依赖关系,是否有从上游registry获取的包?如果是,请检查您的账户是否有上游权限。或者你可以尝试使用另一个简单的包(并锁定)json文件,检查它是否稳定。
© www.soinside.com 2019 - 2024. All rights reserved.