我想使用 Azure Pipeline“缓存任务”来缓存 npm,稍后当我基于 dockerfile 构建 docker 映像时,使用该缓存来减少构建时间。我现在很少更改 package.json 文件,但 Azure Pipeline 中的 docker 映像构建速度非常慢。如果我在基于 dockerfile 进行构建等时查看日志,则会发现命令“npm install”占据了大部分构建时间。我做了一些研究,但找不到这样的案例......
这就是我现在想到的:
azure-pipeline.yml
- "test"
resources:
- repo: self
pool:
vmImage: "ubuntu-latest"
variables:
tag: "$(Build.BuildId)"
DOCKER_BUILDKIT: 1
npm_config_cache: $(Pipeline.Workspace)/.npm
steps:
- task: Cache@2
inputs:
key: 'npm | "$(Agent.OS)" | package.json'
path: "$(npm_config_cache)"
cacheHitVar: "CACHE_RESTORED"
displayName: Cache npm
- script: npm ci
- task: Docker@2
displayName: Build an image
inputs:
command: "build"
Dockerfile: "**/Dockerfile.test"
arguments: "--cache-from=$(npm_config_cache)" <--- I WOULD LIKE TO USE THE CACHE IN THIS TASK
tags: "$(tag)"
Dockerfile
FROM node:19-alpine as build
WORKDIR /app
COPY package.json .
ENV REACT_APP_ENVIRONMENT=test
RUN npm ci --cache $(npm_config_cache) <-- This is not right but I would like to do something like this
COPY . .
RUN npm run build
#Stage 2
FROM nginx:1.23.2-alpine
WORKDIR /usr/share/nginx/html
RUN rm -rf *
COPY nginx/default.conf /etc/nginx/conf.d/default.conf
COPY --from=build /app/build /usr/share/nginx/html
EXPOSE 80
ENTRYPOINT ["nginx", "-g", "daemon off;"]
所以我想做的是在 azure-pipeline 的下一步/任务中使用我的 azure-pipeline 中的缓存任务,我将在其中基于上面提供的 dockerfile 构建我的 docker 映像。在我的 Dockerfile 中,我得到了这一行 ->
RUN npm ci --cache $(npm_config_cache)
以某种方式我想达到它,或者这甚至可能吗?我真的无法弄清楚,也许我的方法完全错误?
非常感谢!
你做到了吗?我目前正在用头撞键盘,试图让这项工作成功,完全相同的问题。