在 Azure Pipeline 中缓存任务以减少构建时间

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

我想使用 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)
以某种方式我想达到它,或者这甚至可能吗?我真的无法弄清楚,也许我的方法完全错误?

非常感谢!

azure docker npm azure-pipelines azure-pipelines-build-task
1个回答
0
投票

你做到了吗?我目前正在用头撞键盘,试图让这项工作成功,完全相同的问题。

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