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

为何GitLab流水线在合并请求触发时仅运行最后一个阶段?

实现GitLab流水线:手动触发全阶段,MR触发仅运行最后阶段(带依赖)

要实现手动点击「Run pipeline」时运行所有阶段,合并请求触发时仅运行最后阶段且满足依赖关系,同时每个阶段至少有一个无rules任务的需求,可参考以下配置方案:

基础配置示例

stages:
  - build
  - test
  - deploy

# Build阶段:无rules任务,仅手动触发时运行
build:main:
  stage: build
  script:
    - echo "执行实际构建操作:编译代码、打包镜像等"
    # 替换为你的构建命令
  only:
    - web # 匹配手动触发场景

# Test阶段:无rules任务,仅手动触发时运行
test:main:
  stage: test
  script:
    - echo "执行实际测试操作:单元测试、集成测试等"
    # 替换为你的测试命令
  only:
    - web

# Deploy阶段:手动/MR触发均运行,支持可选依赖
deploy:final:
  stage: deploy
  script:
    - echo "执行实际部署操作:推送镜像、部署到服务器等"
    # 替换为你的部署命令
  needs:
    - job: build:main
      optional: true # MR触发时该任务不存在,跳过依赖检查
    - job: test:main
      optional: true
  rules:
    - if: $CI_PIPELINE_SOURCE == 'merge_request_event' # MR触发时运行
    - if: $CI_PIPELINE_SOURCE == 'web' # 手动触发时运行

配置说明

  • 阶段定义:明确build、test、deploy三个执行阶段,确保流水线按顺序推进。
  • 无rules任务实现:build:main和test:main未配置rules字段(符合需求中“无rules任务”的要求),通过only: web限制仅在手动触发(点击「Run pipeline」)时运行,合并请求触发时不会创建这两个任务。
  • Deploy阶段依赖处理:
    用rules同时支持手动和MR两种触发场景;needs: optional: true设置可选依赖:手动触发时,必须等build:main和test:main执行完成才会启动deploy:final;MR触发时,因前两个任务不存在,流水线会跳过依赖检查直接运行deploy:final。

进阶优化:依赖手动触发的构建产物

如果MR触发的部署任务需要依赖手动触发时生成的构建产物,可结合GitLab工件(Artifacts)实现:

build:main:
  stage: build
  script:
    - echo "执行构建操作"
    - mkdir -p dist
    - echo "构建产物示例" > dist/output.txt
  only:
    - web
  artifacts:
    paths:
      - dist/
    expire_in: 1 week # 设置工件过期时间

deploy:final:
  stage: deploy
  script:
    - |
      if [ "$CI_PIPELINE_SOURCE" = "merge_request_event" ]; then
        # 下载最新成功的手动流水线的Build工件
        curl --header "JOB-TOKEN: $CI_JOB_TOKEN" "$CI_API_V4_URL/projects/$CI_PROJECT_ID/jobs/artifacts/main/download?job=build:main" -o artifacts.zip
        unzip artifacts.zip
      fi
    - echo "基于工件执行部署操作"
  needs:
    - job: build:main
      optional: true
    - job: test:main
      optional: true
  rules:
    - if: $CI_PIPELINE_SOURCE == 'merge_request_event'
    - if: $CI_PIPELINE_SOURCE == 'web'

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.02 17:20:58