---
url: /zh/build/showcase/monorepo.md
---
本文将介绍如何在 Monorepo 场景下修改特定目录时，仅触发该目录对应服务的构建任务，避免全量构建，以免产生资源浪费和消耗时长等问题。

## 涉及到的知识点

* 语法手册：[Pipeline.ifModify](../grammar.md#pipeline-ifmodify)
* 系统默认环境变量: [CNB\_PIPELINE\_KEY](../build-in-env.md#cnb_pipeline_key)

### 配置文件示例

```yaml title=.cnb.yml
# 使用YAML锚点功能，方便配置复用
.docker-build-pipeline: &docker-build-pipeline
  services:
    # 声明后，流水线内可以直接使用docker命令
    - docker
  ifModify:
    # 指定仅修改某个目录下文件时，才触发才目录下构建，
    # 此处CNB_PIPELINE_KEY为系统默认环境变量，代表当前流水线的KEY
    - packages/${CNB_PIPELINE_KEY}/**
  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/${CNB_PIPELINE_KEY} && docker build -t $IMAGE_TAG .

    - name: push image
      script: docker push $IMAGE_TAG

main:
  push:
    package-1: *docker-build-pipeline
    package-2: *docker-build-pipeline
```
