Monorepo按需构建
本文将介绍如何在 Monorepo 场景下修改特定目录时,仅触发该目录对应服务的构建任务,避免全量构建,以免产生资源浪费和消耗时长等问题。
涉及到的知识点
- 流水线语法:Pipeline.ifModify
- 系统默认环境变量: CNB_PIPELINE_KEY
配置文件示例
1.docker-build-pipeline: &docker-build-pipeline # 使用YAML锚点功能,方便配置复用
2 - services:
3 - docker #声明后,流水线内可以直接使用docker命令
4 ifModify:
5 - packages/${CNB_PIPELINE_KEY}/** #指定仅修改某个目录下文件时,才触发才目录下构建,此处CNB_PIPELINE_KEY为系统默认环境变量,代表当前流水线的KEY
6 stages:
7 - name: set docker tag
8 script: echo -n "${CNB_DOCKER_REGISTRY}/${CNB_REPO_SLUG_LOWERCASE}:$CODING_COMMIT_SHORT"
9 exports:
10 info: IMAGE_TAG
11
12 - name: docker build
13 script: cd packages/${CNB_PIPELINE_KEY} && docker build -t $IMAGE_TAG .
14
15 - name: push image
16 script: docker push $IMAGE_TAG
17
18main:
19 push:
20 package-1: *docker-build-pipeline
21 package-2: *docker-build-pipeline