You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何配置Turborepo与CircleCI,仅为变更的React应用执行CI/CD?

仅为变更的Turborepo React应用运行CircleCI流水线

默认情况下,修改Project 1代码提交后,CircleCI会触发整个流水线的所有作业——也就是如果没做特殊配置,两个应用的构建/测试任务都会执行。要实现仅针对变更应用运行流水线,需要结合Turborepo的变更过滤能力和CircleCI的配置,具体步骤如下:

1. 配置Turborepo的任务流水线

在项目根目录的turbo.json里定义好各个应用的任务(比如构建、测试),明确依赖关系和输出目录,让Turborepo能准确计算变更哈希:

{
  "$schema": "https://turbo.build/schema.json",
  "pipeline": {
    "build": {
      "dependsOn": ["^build"],
      "outputs": ["dist/**", "build/**"]
    },
    "test": {
      "dependsOn": [],
      "outputs": []
    }
  }
}
  • ^build表示运行当前项目的build任务前,先执行其所有依赖项目的build任务
  • outputs指定任务生成的产物目录,用于Turborepo的缓存和变更检测逻辑

2. 编写CircleCI配置文件

在.circleci/config.yml中,通过Turborepo的--filter参数实现仅运行变更项目的任务,具体配置如下:

第一步:统一安装依赖

先定义一个复用的依赖安装作业,避免重复安装浪费资源:

version: 2.1

jobs:
  install-deps:
    docker:
      - image: cimg/node:20
    steps:
      - checkout
      - restore_cache:
          keys:
            - npm-v1-{{ checksum "package-lock.json" }}
            - npm-v1-
      - run: npm install
      - save_cache:
          key: npm-v1-{{ checksum "package-lock.json" }}
          paths:
            - node_modules
      - persist_to_workspace:
          root: .
          paths:
            - node_modules
            - apps
            - packages

第二步:定义通用Turborepo任务作业

创建一个可复用的作业,接收任务名称参数,并用Turborepo的变更过滤语法运行任务:

run-turbo-task:
    docker:
      - image: cimg/node:20
    parameters:
      task:
        type: string
    steps:
      - checkout
      - attach_workspace:
          at: .
      # 核心逻辑:过滤出相对于上一次提交有变更的项目
      - run: npx turbo run << parameters.task >> --filter=[...HEAD^1]

这里的--filter=[...HEAD^1]是关键:

  • [...]是Turborepo的变更范围语法,会匹配所有在当前提交中变更的项目
  • HEAD^1表示对比上一次提交的变更内容
  • 如果两个应用没有互相依赖,修改Project 1只会触发Project 1的对应任务;如果有依赖,依赖该项目的任务也会被触发(符合monorepo的依赖逻辑)

第三步:串联工作流

将作业按顺序串联,确保先安装依赖再运行任务:

workflows:
  build-test-workflow:
    jobs:
      - install-deps
      - run-turbo-task:
          name: run-build
          task: build
          requires:
            - install-deps
      - run-turbo-task:
          name: run-test
          task: test
          requires:
            - install-deps

3. 验证效果

修改Project 1的代码并提交到GitHub后,CircleCI启动流水线时:

  • Turborepo会自动检测到只有Project 1有变更
  • 仅运行Project 1的build和test任务,Project 2的任务不会执行

如果需要更精确的过滤(比如只针对apps目录下的项目),可以把过滤参数改成--filter=./apps/*[...]HEAD^1。

内容的提问来源于stack exchange,提问作者Marius

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.18 15:55:20