出现的问题:
sh ‘pnpm approve-builds --all’ 在 sh ‘pnpm install --no-frozen-lockfile’ 前面的时候第一次构建总是出错。
但第二次构建的时候就成功。
处理
是正常现象:pnpm approve-builds --all 必须在 已经有 pending/ignored build scripts 之后才有东西可批准。
第一次构建时你把它放在 pnpm install --no-frozen-lockfile 前面,它还不知道哪些依赖需要跑 build script,所以批准不到任何包;随后 install 才发现并拦截这些脚本,导致首次构建失败。
pnpm 文档说明 approve-builds 是批准依赖在安装期间运行脚本,批准项会写入 onlyBuiltDependencies。--all 是批准所有 pending builds。
推荐顺序:
pnpm install --no-frozen-lockfile
pnpm approve-builds --all
pnpm rebuild
pnpm build
核心原因:approve-builds 不是“预先允许所有未来依赖”,而是“批准当前已被 pnpm 发现、正在等待批准的 build scripts”。
如果你的 Agent 是全新的(Docker/K8s Pod 每次重建),可以:
pipeline {
agent any
stages {
stage('Install') {
steps {
sh '''
corepack enable
# 第一次安装,生成 pending builds
pnpm install --no-frozen-lockfile || true
# 自动批准
pnpm approve-builds --all
# 重新执行安装
pnpm install --no-frozen-lockfile
'''
}
}
stage('Build') {
steps {
sh 'pnpm build'
}
}
}
}
最终使用的脚本是添加一个 Stage
stage("Install") {
steps {
sh '''
pnpm install --no-frozen-lockfile || true
pnpm approve-builds --all
pnpm install --no-frozen-lockfile
'''
}
}


Comments