如何在 azure dev-ops 管道中使用 npmauthenticate 步骤而不使 docker 缓存失效

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

我正在使用 azure-devops 的 CICD 构建一个 dockerized Angular 项目。在我的管道中,我有:

  • 从 npm 安装的依赖项以及一些通过 azure 中的工件源安装的依赖项。

  • 我已在项目的根目录添加了所需的

    .npmrc
    文件,一切正常。

在我的管道中,我使用

npmAuthenticate
步骤来授予对私有注册表的经过身份验证的访问权限。此步骤依次将生成的访问令牌附加到
.npmrc
文件中。

 - task: npmAuthenticate@0
   inputs:
     workingFile: $(System.DefaultWorkingDirectory)/.npmrc
     feed: 'xxx-xx-xxx'

由于整个构建过程都在 docker 内进行,因此当涉及到复制

.npmrc
文件时,这会使 docker 缓存失效,因为文件内部已发生更改。

FROM docker.io/node:lts-alpine AS builder

WORKDIR /app

COPY package*.json ./
COPY .npmrc .npmrc //cache invalidates from this point

RUN npm install
COPY . ./

RUN npm run build:project-x

是否有办法在不使缓存失效的情况下使用

.npmrc
文件实现身份验证访问?我希望我未来的构建能够更快并利用缓存 node_modules。

angular docker azure-devops azure-pipelines .npmrc
1个回答
0
投票

npmAuthenticate@0
会将生成的访问令牌附加到.npmrc文件中,这是设计行为。

如果您不想更改 .npmrc 文件,可以进入 DevOps target feed -> Connect to feed -> npm -> Other 页面,按照步骤设置 .npmrc 文件(doc here ).

  1. 将页面上的
    authentication code
    直接复制到您的.npmrc文件,不需要用户级别的.npmrc。替换文件中您的电子邮件。
; begin auth token .... ; end auth token

    根据本地计算机上的个人访问令牌生成 Base64 编码,复制并替换上面的 devops .npmrc 中的
  1. [BASE64_ENCODED_PERSONAL_ACCESS_TOKEN]
    。 (确保您的帐户具有相关权限,例如:目标 Feed 的所有者或贡献者权限)
我的 .npmrc 文件供您参考:

enter image description here

您可以删除

npmAuthenticate@0

任务,因为它现在可以直接在管道中使用
npm install
命令。

© www.soinside.com 2019 - 2024. All rights reserved.