我正在使用 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。
npmAuthenticate@0
会将生成的访问令牌附加到.npmrc文件中,这是设计行为。
如果您不想更改 .npmrc 文件,可以进入 DevOps target feed -> Connect to feed -> npm -> Other 页面,按照步骤设置 .npmrc 文件(doc here ).
authentication code
直接复制到您的.npmrc文件,不需要用户级别的.npmrc。替换文件中您的电子邮件。
; begin auth token
....
; end auth token
[BASE64_ENCODED_PERSONAL_ACCESS_TOKEN]
。 (确保您的帐户具有相关权限,例如:目标 Feed 的所有者或贡献者权限)
npmAuthenticate@0
任务,因为它现在可以直接在管道中使用
npm install
命令。