云原生构建CNB缓存使用教程:手把手教你学会使用
·
云原生构建缓存方式分为 volumes 功能和docker cache;
volumes 功能
云原生构建 利用 Docker 的 volumes 功能,可在配置文件中通过声明 pipeline.docker.volumes, 将构建机上目录 mount 到容器中。构建任务可将下载好的依赖放入构建机缓存,供后续流水线使用。
.yml文件配置如下:
main:
push:
"volume-cache":
docker:
image: node:22-alpine
volumes:
- node_modules:copy-on-write
stages:
- name: npm install
script: npm install
volumes 的缺点是,缓存只在当前构建机有效。云原生构建 会根据项目构建并发情况,动态在几台构建机上分配一台作为当前流水线构建机,后续流水线分配了其他无缓存的构建机,仍会重新从网络下载资源;
docker cache
云原生构建 还提供了一种 cache 方式:在一个镜像中 npm install 好依赖,然后缓存这个镜像在当前构建机,并推送到远端镜像源。
后续流水线使用时,若构建机有镜像缓存,则直接使用。若构建机无镜像缓存,则会从远端镜像源拉取下来。
.yml配置如下:
main:
push:
"volume-cache":
docker:
# 通过 Dockerfile 指定构建环境
build:
dockerfile: ./dockerfiles/ci-dockerfile
runner:
cpus: 8
stages:
- name: 依赖是否更新,依赖安装
type: docker:cache
options:
dockerfile: cache.dockerfile
by:
- package.json
- pnpm-lock.yaml
versionBy:
- pnpm-lock.yaml
exports:
name: DOCKER_CACHE_IMAGE_NAME
- name: 使用缓存
image: $DOCKER_CACHE_IMAGE_NAME
commands:
- cp -r "$NODE_PATH" ./node_modules
需穿件新增 cache.dockerfile 文件
cache.dockerfile内容如下(使用的为pnpm,用的pnpm-lock.yaml做判断依赖是否更新,依赖未更新用缓存,更新了生成新的容器)
# cache.dockerfile
FROM node:22-alpine AS base
# 安装 pnpm
RUN npm install pnpm@9.14.4 -g
FROM base AS dependencies
# 设置工作目录
WORKDIR /app
# 首先只复制包管理文件
COPY package.json pnpm-lock.yaml ./
# 安装依赖 - 这层会被缓存直到包管理文件变化
RUN pnpm install --frozen-lockfile --prod=false
FROM base AS runtime
WORKDIR /app
# 复制 node_modules
COPY --from=dependencies /app/node_modules ./node_modules
# 设置环境变量
ENV NODE_PATH=/app/node_modules
更多推荐
所有评论(0)