You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多
文档控制台
免费开始使用

在CloudBuild CI流水线中使用PNPM:是否需每步安装?替代方案有哪些?

在CloudBuild CI流水线中使用pnpm的优化方案

你不需要在每个步骤里重复安装pnpm,以下几种方案可以帮你简化流程:

1. 使用预安装pnpm的自定义构建镜像

提前把pnpm打包到Node.js基础镜像里,推送到你的容器仓库(比如GCR),后续所有CloudBuild步骤直接用这个自定义镜像,省去每次安装pnpm的步骤。

示例Dockerfile:

FROM node:${NODE_VERSION}
RUN npm install -g pnpm@${PNPM_VERSION}

修改后的CloudBuild配置:

steps:
  - id: '安装依赖'
    name: 'gcr.io/你的项目ID/custom-node-pnpm:${_NODE_VERSION}-${_PNPM_VERSION}'
    entrypoint: 'bash'
    args: ['-c', 'pnpm install']
  - name: 'gcr.io/你的项目ID/custom-node-pnpm:${_NODE_VERSION}-${_PNPM_VERSION}'
    entrypoint: 'bash'
    args: ['-c', 'pnpm run test']

2. 利用CloudBuild的工作区缓存

通过CloudBuild的卷缓存功能,把pnpm的全局安装目录缓存起来,后续步骤直接复用已安装的pnpm。

修改后的CloudBuild配置:

steps:
  - id: '安装pnpm并缓存'
    name: ${_NODE_VERSION}
    entrypoint: 'bash'
    args:
      - "-c"
      - |
        mkdir -p /workspace/.pnpm-global
        npm install -g ${_PNPM_VERSION} --prefix /workspace/.pnpm-global
        echo "export PATH=/workspace/.pnpm-global/bin:\$PATH" >> /workspace/.env
        pnpm install
    volumes:
      - name: pnpm-cache
        path: /workspace/.pnpm-global
  - name: ${_NODE_VERSION}
    entrypoint: 'bash'
    args:
      - "-c"
      - |
        source /workspace/.env
        pnpm run test
    volumes:
      - name: pnpm-cache
        path: /workspace/.pnpm-global

额外优化:还可以缓存pnpm的依赖存储目录,加快pnpm install的速度,只需在第一步加上pnpm config set store-dir /workspace/.pnpm-store,并把这个目录也加入缓存卷。

3. 合并流水线步骤(适合简单场景)

如果你的流水线逻辑不复杂,直接把安装pnpm、依赖、执行测试合并到同一个步骤里,避免重复操作。

修改后的CloudBuild配置:

steps:
  - id: '安装依赖并执行测试'
    name: ${_NODE_VERSION}
    entrypoint: 'bash'
    args:
      - "-c"
      - |
        npm install -g ${_PNPM_VERSION}
        pnpm install
        pnpm run test

注意:这种方式下,步骤中任何一个环节失败都会导致整个步骤终止,适合流程简单的场景。

内容的提问来源于stack exchange,提问作者LEVI JOEL CASTILLON URQUIZA

火山引擎 最新活动