Monorepo 按需构建
277 字小于 1 分钟
本文介绍如何在 Monorepo 中实现按需构建——仅修改特定目录时触发对应服务的构建任务,避免全量构建的资源浪费。
前置知识
- 语法手册:Pipeline.ifModify
- 系统默认环境变量:CNB_PIPELINE_KEY
配置文件示例
多个包可采用统一模板 + 变量区分的方式,避免复制粘贴:
.cnb.yml
main:
push:
package-1:
services:
- docker
ifModify:
- packages/package-1/**
env:
PACKAGE: package-1
stages:
- name: set docker tag
script: echo -n "${CNB_DOCKER_REGISTRY}/${CNB_REPO_SLUG_LOWERCASE}:$CNB_COMMIT_SHORT"
exports:
info: IMAGE_TAG
- name: docker build
script: cd packages/$PACKAGE && docker build -t $IMAGE_TAG .
- name: push image
script: docker push $IMAGE_TAG
package-2:
services:
- docker
ifModify:
- packages/package-2/**
env:
PACKAGE: package-2
stages:
- name: set docker tag
script: echo -n "${CNB_DOCKER_REGISTRY}/${CNB_REPO_SLUG_LOWERCASE}:$CNB_COMMIT_SHORT"
exports:
info: IMAGE_TAG
- name: docker build
script: cd packages/$PACKAGE && docker build -t $IMAGE_TAG .
- name: push image
script: docker push $IMAGE_TAG当包数量较多时,推荐通过 include 将通用 stages 抽为模板文件, 每个包仅需声明 ifModify 和 env 即可复用。