Monorepo按需构建

在 Monorepo 场景中,通过使用流水线语法 `Pipeline.ifModify` 和系统默认环境变量 `CNB_PIPELINE_KEY`,可实现对修改特定目录仅触发对应服务构建任务的优化,避免全量构建带来的资源和时间消耗。配置示例展示了如何通过 YAML 锚点复用配置,并设置条件触发和构建步骤。

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

涉及到的知识点

配置文件示例

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