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

如何创建跨多阶段的CI作业以提升并行性?

如何配置跨阶段并行CI作业,让测试尽早启动

哈哈,这个场景太常见了!很多团队都会遇到核心构建快但有个慢任务拖后腿,想让测试尽早跑起来的需求。我来给你拆解下怎么实现,用主流的CI工具举例子,你一看就懂!

核心思路

要实现你的需求,关键要做到两点:

  1. 让slow_build和核心build任务同时启动,不用等彼此
  2. 让test任务只依赖核心build的完成,完全不关心slow_build的状态

本质就是打破传统的“阶段线性执行”限制,通过并行阶段/独立作业 + 精准依赖控制来提升效率。

具体配置示例

1. GitLab CI 实现

GitLab CI支持并行阶段,同时可以用needs字段精准指定作业依赖:

# 定义并行阶段:prepare之后,build和slow_build_stage同时执行,然后才是test
stages:
  - prepare
  - [build, slow_build_stage]
  - test

# 准备阶段:拉取代码、安装通用依赖等
prepare_job:
  stage: prepare
  script:
    - git fetch --all
    - apt-get install -y common-deps

# 核心build任务,快速完成
fast_build_job:
  stage: build
  needs: [prepare_job]
  script:
    - echo "编译核心代码、生成测试所需产物"
    - ./compile-core.sh
    - ./package-test-assets.sh

# 慢构建任务,和build阶段同时启动
slow_build_job:
  stage: slow_build_stage
  needs: [prepare_job]
  script:
    - echo "编译文档、打包大体积静态资源、上传镜像等慢操作"
    - ./build-docs.sh
    - ./package-large-assets.sh

# 测试任务:只等fast_build完成就启动,完全不等slow_build
test_job:
  stage: test
  needs: [fast_build_job]
  script:
    - echo "运行单元测试、集成测试"
    - ./run-unit-tests.sh
    - ./run-integration-tests.sh

2. GitHub Actions 实现

GitHub Actions通过jobs的needs字段控制依赖,默认不依赖的jobs会并行启动:

name: Parallel CI Pipeline

on: [push, pull_request]

jobs:
  # 准备任务:拉取代码、缓存依赖
  prepare:
    runs-on: ubuntu-latest
    steps:
      - name: Checkout code
        uses: actions/checkout@v4
      - name: Cache dependencies
        uses: actions/cache@v3
        with:
          path: ~/.npm
          key: ${{ runner.os }}-npm-${{ hashFiles('package-lock.json') }}

  # 核心build任务
  fast_build:
    runs-on: ubuntu-latest
    needs: prepare
    steps:
      - name: Checkout code
        uses: actions/checkout@v4
      - name: Install deps
        run: npm install
      - name: Build core assets
        run: npm run build:core

  # 慢构建任务,和fast_build并行启动
  slow_build:
    runs-on: ubuntu-latest
    needs: prepare
    steps:
      - name: Checkout code
        uses: actions/checkout@v4
      - name: Install deps
        run: npm install
      - name: Build docs & large assets
        run: npm run build:docs && npm run build:large

  # 测试任务:只依赖fast_build完成
  test:
    runs-on: ubuntu-latest
    needs: fast_build
    steps:
      - name: Checkout code
        uses: actions/checkout@v4
      - name: Run tests
        run: npm test

关键注意事项

  • 确保test任务不需要slow_build的产物,如果有部分测试依赖slow_build,可以拆分测试任务:一部分依赖fast_build先跑,另一部分等slow_build完成再跑
  • 不同CI工具的语法略有差异,但核心逻辑一致:并行启动非依赖任务 + 精准绑定依赖关系
  • 如果你的CI工具不支持并行阶段,也可以把slow_build放到和build同一个阶段,只要它和build任务没有依赖,就会并行执行,然后test只依赖build任务即可

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 08:49:06